{"title":"The Autumn Edit","description":"\u003clink rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Jost:wght@300;400;500\u0026amp;family=Newsreader:opsz,wght@6..72,300;6..72,400\u0026amp;family=Archivo:wght@400;500;600\u0026amp;display=swap\"\u003e\u003cstyle\u003ebody{background:#EDEDEA;}\u003c\/style\u003e\u003cdiv style=\"max-width:1100px;margin:0 auto 26px;display:flex;flex-wrap:wrap;gap:14px;align-items:stretch;\"\u003e\n\u003cdiv style=\"flex:1 1 260px;min-width:0;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;background:#F4F4F2;border-radius:14px;padding:20px 18px;text-align:center;border:1px solid #C2C4C7;\"\u003e\n\u003cdiv style=\"width:36px;height:1px;background:#7A2E33;margin:0 auto 14px;\"\u003e\u003c\/div\u003e\n\u003cdiv style=\"font-family:'Newsreader',Georgia,'Times New Roman',serif;font-size:16px;line-height:1.62;font-weight:300;color:#16181C;\"\u003eFresh pieces, added to the SOLTERI edit.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"flex:1 1 260px;min-width:0;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;background:#FFFFFF;border-radius:14px;padding:20px 18px;text-align:center;border:1px solid #C2C4C7;border-top:2px solid #7A2E33;\"\u003e\n\u003cdiv style=\"font-family:'Archivo','Helvetica Neue',Arial,sans-serif;font-size:9px;font-weight:600;letter-spacing:.24em;text-transform:uppercase;color:#6B6F77;\"\u003eStock up \u0026amp; save\u003c\/div\u003e\n\u003cdiv style=\"font-family:'Jost','Helvetica Neue',Arial,sans-serif;font-size:19px;line-height:1.25;font-weight:300;letter-spacing:.01em;color:#16181C;margin-top:6px;\"\u003eThe more you take, the less you pay\u003c\/div\u003e\n\u003cdiv style=\"display:flex;flex-wrap:nowrap;gap:6px;align-items:stretch;margin-top:14px;\"\u003e\n\u003cdiv style=\"flex:1 1 0;min-width:0;box-sizing:border-box;background:#F4F4F2;border:1px solid #C2C4C7;border-radius:10px;padding:11px 6px 10px;text-align:center;\"\u003e\n\u003cdiv style=\"font-family:'Archivo','Helvetica Neue',Arial,sans-serif;font-size:10px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:#16181C;\"\u003eBuy 2\u003c\/div\u003e\n\u003cdiv style=\"font-family:'Jost','Helvetica Neue',Arial,sans-serif;font-size:27px;line-height:1;font-weight:300;letter-spacing:-.01em;color:#2B3A4F;margin:5px 0 0;\"\u003e10%\u003c\/div\u003e\n\u003cdiv style=\"font-family:'Archivo','Helvetica Neue',Arial,sans-serif;font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:#6B6F77;margin-top:2px;\"\u003eOff\u003c\/div\u003e\n\u003cdiv style=\"margin-top:8px;font-family:'Archivo','Helvetica Neue',Arial,sans-serif;font-size:9px;line-height:1.3;letter-spacing:.06em;text-transform:uppercase;color:#6B6F77;\"\u003ePerfect Pair\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"flex:1 1 0;min-width:0;box-sizing:border-box;background:#F4F4F2;border:1px solid #C2C4C7;border-radius:10px;padding:11px 6px 10px;text-align:center;\"\u003e\n\u003cdiv style=\"font-family:'Archivo','Helvetica Neue',Arial,sans-serif;font-size:10px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:#16181C;\"\u003eBuy 3\u003c\/div\u003e\n\u003cdiv style=\"font-family:'Jost','Helvetica Neue',Arial,sans-serif;font-size:27px;line-height:1;font-weight:300;letter-spacing:-.01em;color:#2B3A4F;margin:5px 0 0;\"\u003e15%\u003c\/div\u003e\n\u003cdiv style=\"font-family:'Archivo','Helvetica Neue',Arial,sans-serif;font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:#6B6F77;margin-top:2px;\"\u003eOff\u003c\/div\u003e\n\u003cdiv style=\"margin-top:8px;font-family:'Archivo','Helvetica Neue',Arial,sans-serif;font-size:9px;line-height:1.3;letter-spacing:.06em;text-transform:uppercase;color:#6B6F77;\"\u003eBest Value\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"flex:1 1 0;min-width:0;box-sizing:border-box;background:#F4F4F2;border:1px solid #C2C4C7;border-radius:10px;padding:11px 6px 10px;text-align:center;\"\u003e\n\u003cdiv style=\"font-family:'Archivo','Helvetica Neue',Arial,sans-serif;font-size:10px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:#16181C;\"\u003eBuy 4\u003c\/div\u003e\n\u003cdiv style=\"font-family:'Jost','Helvetica Neue',Arial,sans-serif;font-size:27px;line-height:1;font-weight:300;letter-spacing:-.01em;color:#2B3A4F;margin:5px 0 0;\"\u003e20%\u003c\/div\u003e\n\u003cdiv style=\"font-family:'Archivo','Helvetica Neue',Arial,sans-serif;font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:#6B6F77;margin-top:2px;\"\u003eOff\u003c\/div\u003e\n\u003cdiv style=\"margin-top:8px;font-family:'Archivo','Helvetica Neue',Arial,sans-serif;font-size:9px;line-height:1.3;letter-spacing:.06em;text-transform:uppercase;color:#6B6F77;\"\u003eExclusive VIP Offer\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"font-family:'Newsreader',Georgia,'Times New Roman',serif;font-size:12px;line-height:1.5;color:#6B6F77;margin-top:12px;\"\u003eApplied automatically at checkout. Mix any pieces in the store.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","products":[{"product_id":"whitmore-quilted-hooded-flannel-jacket","title":"Whitmore - Quilted Hooded Flannel Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Check Hooded Jacket With Quilted Lining\u003c\/h2\u003e\n\u003cp\u003eWhitmore is a shirt jacket with a brushed check face, a diamond-stitched quilted lining and an attached soft hood that sits under a coat collar.\u003c\/p\u003e\n\u003cp\u003eThe button-through front opens flat, and there is one flapped chest pocket. The fit is relaxed, with room for a hoodie underneath. Five colours: dark blue, black, blue, red and yellow. Machine wash cold and hang to dry.\u003c\/p\u003e\n\u003cp\u003eSized S to 5XL. The sizing table below gives the maker's garment measurements for each size.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eChest (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eChest (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e107\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e62\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e72\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e28.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e112\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e44.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e63\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e73.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e28.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e117\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e46.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e64\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e75\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e122\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e48.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e65\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e76.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30.1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e127\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e50.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e66\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e78\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e3XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e132\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e52.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e67\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e79.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e31.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e137\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e53.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e68\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e81\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e31.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e5XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e144\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e56.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e69\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e27.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e82.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e32.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment and given in centimetres, with the inch equivalent alongside. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"110.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\",\"4XL\",\"5XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Dark blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-flannel__c_dark-blue.jpg?v=1793740549\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-flannel__c_black.jpg?v=1793740549\u0026amp;width=96\"},{\"v\":\"Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-flannel__c_blue.jpg?v=1793740549\u0026amp;width=96\"},{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-flannel__c_red.jpg?v=1793740549\u0026amp;width=96\"},{\"v\":\"Yellow\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-flannel__c_yellow.jpg?v=1793740549\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eRuns small — slim cut\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eSize up. Between sizes? Take the larger size. The larger sizes are cut tighter - size up in XL and above.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:38.1%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"slt-fit__on\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Dark blue \/ S","offer_id":60623182496078,"sku":"SLT1006-001","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Dark blue \/ M","offer_id":60623182528846,"sku":"SLT1006-002","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Dark blue \/ L","offer_id":60623182561614,"sku":"SLT1006-003","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Dark blue \/ XL","offer_id":60623182594382,"sku":"SLT1006-004","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Dark blue \/ 2XL","offer_id":60623182627150,"sku":"SLT1006-005","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Dark blue \/ 3XL","offer_id":60623182659918,"sku":"SLT1006-006","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Dark blue \/ 4XL","offer_id":60623182692686,"sku":"SLT1006-007","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Dark blue \/ 5XL","offer_id":60623182725454,"sku":"SLT1006-008","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":60623182758222,"sku":"SLT1006-009","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60623182790990,"sku":"SLT1006-010","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60623182823758,"sku":"SLT1006-011","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60623182856526,"sku":"SLT1006-012","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":60623182889294,"sku":"SLT1006-013","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":60623182922062,"sku":"SLT1006-014","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 4XL","offer_id":60623182954830,"sku":"SLT1006-015","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 5XL","offer_id":60623182987598,"sku":"SLT1006-016","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ S","offer_id":60623183020366,"sku":"SLT1006-017","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ M","offer_id":60623183053134,"sku":"SLT1006-018","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ L","offer_id":60623183085902,"sku":"SLT1006-019","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XL","offer_id":60623183118670,"sku":"SLT1006-020","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 2XL","offer_id":60623183151438,"sku":"SLT1006-021","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 3XL","offer_id":60623183184206,"sku":"SLT1006-022","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 4XL","offer_id":60623183216974,"sku":"SLT1006-023","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 5XL","offer_id":60623183249742,"sku":"SLT1006-024","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ S","offer_id":60623183282510,"sku":"SLT1006-025","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ M","offer_id":60623183315278,"sku":"SLT1006-026","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ L","offer_id":60623183348046,"sku":"SLT1006-027","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XL","offer_id":60623183380814,"sku":"SLT1006-028","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 2XL","offer_id":60623183413582,"sku":"SLT1006-029","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 3XL","offer_id":60623183446350,"sku":"SLT1006-030","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 4XL","offer_id":60623183479118,"sku":"SLT1006-031","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 5XL","offer_id":60623183511886,"sku":"SLT1006-032","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Yellow \/ S","offer_id":60623183544654,"sku":"SLT1006-033","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Yellow \/ M","offer_id":60623183577422,"sku":"SLT1006-034","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Yellow \/ L","offer_id":60623183610190,"sku":"SLT1006-035","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Yellow \/ XL","offer_id":60623183642958,"sku":"SLT1006-036","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Yellow \/ 2XL","offer_id":60623183675726,"sku":"SLT1006-037","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Yellow \/ 3XL","offer_id":60623183708494,"sku":"SLT1006-038","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Yellow \/ 4XL","offer_id":60623183741262,"sku":"SLT1006-039","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Yellow \/ 5XL","offer_id":60623183774030,"sku":"SLT1006-040","price":110.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-flannel__01_studio.jpg?v=1793740549"},{"product_id":"ashcroft-double-breasted-trench-coat","title":"Ashcroft - Double-Breasted Trench Coat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Long Double-Breasted Trench With Epaulettes\u003c\/h2\u003e\n\u003cp\u003eAshcroft is a double-breasted trench coat with two rows of buttons across the chest, wide notched lapels and buttoned epaulettes at both shoulders.\u003c\/p\u003e\n\u003cp\u003eThe hem falls below the knee, long enough to cover a suit jacket. The firm, water-shedding woven face has a smooth full lining and a straight cut for layering. Three colours: black, khaki and white. Dry clean recommended.\u003c\/p\u003e\n\u003cp\u003eSized M to 4XL. The sizing table below gives the maker's garment measurements for each size.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eChest (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eChest (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e103\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e40.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e95\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e37.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e62.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e108\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e96\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e37.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e63.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e113\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e44.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e97\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e38.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e64.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.2\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e118\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e46.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e98\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e38.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e65.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e3XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e123\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e48.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e99\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e39.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e66.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e128\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e50.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e100\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e39.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e67.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment and given in centimetres, with the inch equivalent alongside. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"143.99\" data-was=\"\" data-sizes='[\"M\",\"L\",\"XL\",\"2XL\",\"3XL\",\"4XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dt-trench__c_black.jpg?v=1793740576\u0026amp;width=96\"},{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dt-trench__c_khaki.jpg?v=1793740576\u0026amp;width=96\"},{\"v\":\"White\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dt-trench__c_white.jpg?v=1793740576\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eTrue to size — regular cut\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eTake your usual size. It sits close to the body, so between sizes, size up.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:30.6%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Black \/ M","offer_id":60623183970638,"sku":"SLT1007-001","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60623184003406,"sku":"SLT1007-002","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60623184036174,"sku":"SLT1007-003","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":60623184068942,"sku":"SLT1007-004","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":60623184101710,"sku":"SLT1007-005","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 4XL","offer_id":60623184134478,"sku":"SLT1007-006","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ M","offer_id":60623184167246,"sku":"SLT1007-007","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ L","offer_id":60623184200014,"sku":"SLT1007-008","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XL","offer_id":60623184232782,"sku":"SLT1007-009","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 2XL","offer_id":60623184265550,"sku":"SLT1007-010","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 3XL","offer_id":60623184298318,"sku":"SLT1007-011","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 4XL","offer_id":60623184331086,"sku":"SLT1007-012","price":143.99,"currency_code":"USD","in_stock":true},{"title":"White \/ M","offer_id":60623184363854,"sku":"SLT1007-013","price":143.99,"currency_code":"USD","in_stock":true},{"title":"White \/ L","offer_id":60623184396622,"sku":"SLT1007-014","price":143.99,"currency_code":"USD","in_stock":true},{"title":"White \/ XL","offer_id":60623184429390,"sku":"SLT1007-015","price":143.99,"currency_code":"USD","in_stock":true},{"title":"White \/ 2XL","offer_id":60623184462158,"sku":"SLT1007-016","price":143.99,"currency_code":"USD","in_stock":true},{"title":"White \/ 3XL","offer_id":60623184494926,"sku":"SLT1007-017","price":143.99,"currency_code":"USD","in_stock":true},{"title":"White \/ 4XL","offer_id":60623184527694,"sku":"SLT1007-018","price":143.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dt-trench__01_studio.jpg?v=1793740549"},{"product_id":"marlow-ribbed-collar-bomber-jacket","title":"Marlow - Ribbed Collar Bomber Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Clean Bomber Jacket With Ribbed Collar\u003c\/h2\u003e\n\u003cp\u003eMarlow is a bomber jacket with a ribbed stand collar, a straight zip-through front and a trim body that sits over a tee without ballooning.\u003c\/p\u003e\n\u003cp\u003ePanel seaming across the shoulders adds structure, zip side pockets sit flush, and ribbed cuffs and a banded hem hold the shape. It is made from a smooth, mid-weight woven shell with a light lining. Five colours: brown, black, green, grey and navy. Machine wash cold and hang to dry.\u003c\/p\u003e\n\u003cp\u003eSized S to 3XL. The sizing table below gives the maker's garment measurements for each size.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eChest (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eChest (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e70\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e27.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e110\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e43.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e46\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e18.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e62\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e72\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e28.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e115\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e45.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e47.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e18.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e63.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e74\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e120\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e47.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e49\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e19.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e65\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e76\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e125\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e49.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e50.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e19.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e66.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.2\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e78\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e130\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e51.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e52\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e68\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e3XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e80\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e31.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e135\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e53.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e53.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e69.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e27.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment and given in centimetres, with the inch equivalent alongside. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"78.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dt-bomber__c_brown.jpg?v=1793740577\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dt-bomber__c_black_z.jpg?v=1793740576\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dt-bomber__c_green.jpg?v=1793740576\u0026amp;width=96\"},{\"v\":\"Grey\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dt-bomber__c_grey.jpg?v=1793740576\u0026amp;width=96\"},{\"v\":\"Navy blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dt-bomber__c_navy-blue.jpg?v=1793740576\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eTrue to size — regular cut\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eTake your usual size. Between sizes? Size up. The larger sizes are cut tighter - size up in XL and above.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:53.7%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Brown \/ S","offer_id":60623184593230,"sku":"SLT1008-001","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":60623184625998,"sku":"SLT1008-002","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":60623184658766,"sku":"SLT1008-003","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":60623184691534,"sku":"SLT1008-004","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 2XL","offer_id":60623184724302,"sku":"SLT1008-005","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 3XL","offer_id":60623184757070,"sku":"SLT1008-006","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":60623184789838,"sku":"SLT1008-007","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60623184822606,"sku":"SLT1008-008","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60623184855374,"sku":"SLT1008-009","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60623184888142,"sku":"SLT1008-010","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":60623184920910,"sku":"SLT1008-011","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":60623184953678,"sku":"SLT1008-012","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ S","offer_id":60623184986446,"sku":"SLT1008-013","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ M","offer_id":60623185019214,"sku":"SLT1008-014","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ L","offer_id":60623185051982,"sku":"SLT1008-015","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XL","offer_id":60623185084750,"sku":"SLT1008-016","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 2XL","offer_id":60623185117518,"sku":"SLT1008-017","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 3XL","offer_id":60623185150286,"sku":"SLT1008-018","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ S","offer_id":60623185183054,"sku":"SLT1008-019","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ M","offer_id":60623185215822,"sku":"SLT1008-020","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ L","offer_id":60623185248590,"sku":"SLT1008-021","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ XL","offer_id":60623185281358,"sku":"SLT1008-022","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ 2XL","offer_id":60623185314126,"sku":"SLT1008-023","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ 3XL","offer_id":60623185346894,"sku":"SLT1008-024","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Navy blue \/ S","offer_id":60623185379662,"sku":"SLT1008-025","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Navy blue \/ M","offer_id":60623185412430,"sku":"SLT1008-026","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Navy blue \/ L","offer_id":60623185445198,"sku":"SLT1008-027","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Navy blue \/ XL","offer_id":60623185477966,"sku":"SLT1008-028","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Navy blue \/ 2XL","offer_id":60623185510734,"sku":"SLT1008-029","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Navy blue \/ 3XL","offer_id":60623185543502,"sku":"SLT1008-030","price":78.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dt-bomber__01_studio.jpg?v=1793740576"},{"product_id":"dawson-sherpa-lined-plaid-shirt-jacket","title":"Dawson - Plush-Lined Plaid Shirt Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Plaid Shirt Jacket With Plush Lining\u003c\/h2\u003e\n\u003cp\u003eDawson is a plaid shirt jacket with a brushed check face and a full deep-pile plush lining that runs through the body and into the sleeves.\u003c\/p\u003e\n\u003cp\u003eIt has a flat shirt collar, a button front and two flapped, buttoned chest pockets sized for a phone. The fit is relaxed, cut to go over a hoodie. Six colours: orange, green, red, black, khaki and navy. Machine wash cold and hang to dry.\u003c\/p\u003e\n\u003cp\u003eSized S to 5XL. The sizing table below gives the maker's garment measurements for each size.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eChest (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eChest (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e47\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e18.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e106\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e41.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e62\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e72\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e28.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e48\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e18.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e112\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e44.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e63\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e73\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e28.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e50\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e19.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e118\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e46.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e64\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e75\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e52\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e126\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e49.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e65\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e77\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e53\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e130\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e51.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e66\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e78\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e3XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e54\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e134\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e52.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e67\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e78\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e55\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e144\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e56.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e68\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e79\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e31.1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e5XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e56\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e148\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e58.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e69\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e27.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e81\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e31.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment and given in centimetres, with the inch equivalent alongside. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"104.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\",\"4XL\",\"5XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Orange\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-sherpa__c_orange.jpg?v=1793740604\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-sherpa__c_green.jpg?v=1793740577\u0026amp;width=96\"},{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-sherpa__c_red.jpg?v=1793740604\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-sherpa__c_black.jpg?v=1793740577\u0026amp;width=96\"},{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-sherpa__c_khaki.jpg?v=1793740577\u0026amp;width=96\"},{\"v\":\"Navy Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-sherpa__c_navy-blue.jpg?v=1793740577\u0026amp;width=96\"},{\"v\":\"Blue-gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-sherpa__c_blue-gray.jpg?v=1793740577\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eTrue to size — slim cut\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eTake your usual size. Between sizes? Size up.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:40.1%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Orange \/ S","offer_id":60623187542350,"sku":"SLT1009-001","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Orange \/ M","offer_id":60623187575118,"sku":"SLT1009-002","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Orange \/ L","offer_id":60623187607886,"sku":"SLT1009-003","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Orange \/ XL","offer_id":60623187640654,"sku":"SLT1009-004","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Orange \/ 2XL","offer_id":60623187673422,"sku":"SLT1009-005","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Orange \/ 3XL","offer_id":60623187706190,"sku":"SLT1009-006","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Orange \/ 4XL","offer_id":60623187738958,"sku":"SLT1009-007","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Orange \/ 5XL","offer_id":60623187771726,"sku":"SLT1009-008","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ S","offer_id":60623187804494,"sku":"SLT1009-009","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ M","offer_id":60623187837262,"sku":"SLT1009-010","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ L","offer_id":60623187870030,"sku":"SLT1009-011","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XL","offer_id":60623187902798,"sku":"SLT1009-012","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 2XL","offer_id":60623187935566,"sku":"SLT1009-013","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 3XL","offer_id":60623187968334,"sku":"SLT1009-014","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 4XL","offer_id":60623188001102,"sku":"SLT1009-015","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 5XL","offer_id":60623188033870,"sku":"SLT1009-016","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ S","offer_id":60623188066638,"sku":"SLT1009-017","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ M","offer_id":60623188099406,"sku":"SLT1009-018","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ L","offer_id":60623188132174,"sku":"SLT1009-019","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XL","offer_id":60623188164942,"sku":"SLT1009-020","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 2XL","offer_id":60623188197710,"sku":"SLT1009-021","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 3XL","offer_id":60623188230478,"sku":"SLT1009-022","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 4XL","offer_id":60623188263246,"sku":"SLT1009-023","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 5XL","offer_id":60623188296014,"sku":"SLT1009-024","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":60623188328782,"sku":"SLT1009-025","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60623188361550,"sku":"SLT1009-026","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60623188394318,"sku":"SLT1009-027","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60623188427086,"sku":"SLT1009-028","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":60623188459854,"sku":"SLT1009-029","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":60623188492622,"sku":"SLT1009-030","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 4XL","offer_id":60623188525390,"sku":"SLT1009-031","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 5XL","offer_id":60623188558158,"sku":"SLT1009-032","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ S","offer_id":60623188590926,"sku":"SLT1009-033","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ M","offer_id":60623188623694,"sku":"SLT1009-034","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ L","offer_id":60623188656462,"sku":"SLT1009-035","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XL","offer_id":60623188689230,"sku":"SLT1009-036","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 2XL","offer_id":60623188721998,"sku":"SLT1009-037","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 3XL","offer_id":60623188754766,"sku":"SLT1009-038","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 4XL","offer_id":60623188787534,"sku":"SLT1009-039","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 5XL","offer_id":60623188820302,"sku":"SLT1009-040","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ S","offer_id":60623188853070,"sku":"SLT1009-041","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ M","offer_id":60623188885838,"sku":"SLT1009-042","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ L","offer_id":60623188918606,"sku":"SLT1009-043","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ XL","offer_id":60623188951374,"sku":"SLT1009-044","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 2XL","offer_id":60623188984142,"sku":"SLT1009-045","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 3XL","offer_id":60623189016910,"sku":"SLT1009-046","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 4XL","offer_id":60623189049678,"sku":"SLT1009-047","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 5XL","offer_id":60623189082446,"sku":"SLT1009-048","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Blue-gray \/ S","offer_id":60623189115214,"sku":"SLT1009-049","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Blue-gray \/ M","offer_id":60623189147982,"sku":"SLT1009-050","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Blue-gray \/ L","offer_id":60623189180750,"sku":"SLT1009-051","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Blue-gray \/ XL","offer_id":60623189213518,"sku":"SLT1009-052","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Blue-gray \/ 2XL","offer_id":60623189246286,"sku":"SLT1009-053","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Blue-gray \/ 3XL","offer_id":60623189279054,"sku":"SLT1009-054","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Blue-gray \/ 4XL","offer_id":60623189311822,"sku":"SLT1009-055","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Blue-gray \/ 5XL","offer_id":60623189344590,"sku":"SLT1009-056","price":104.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-sherpa__01_studio_ebffd3eb-fa4f-476e-9900-89a19ca6dd01.jpg?v=1793740577"},{"product_id":"arthur-hooded-full-zip-jacket","title":"Arthur - Hooded Full-Zip Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Hooded Full-Zip Jacket for Daily Wear\u003c\/h2\u003e\n\u003cp\u003eArthur is a hooded jacket with a full-length zip, a fixed hood and a lined body that slides easily over knitwear.\u003c\/p\u003e\n\u003cp\u003eBoth hand pockets zip closed, so a phone stays put, and the hood has no drawcord to fuss with. It is made from a mid-weight woven shell with a smooth full lining, in a regular fit. Four colours: brown, navy, grey and olive green. Machine wash cold and hang to dry.\u003c\/p\u003e\n\u003cp\u003eSized S to 3XL. The sizing table below gives the maker's garment measurements for each size.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003e1\/2 Chest (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003e1\/2 Chest (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eClothes Length (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eClothes Length (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder Width (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder Width (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve Length (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve Length (in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e51\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e64\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e45.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e17.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e61\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e54\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e66\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e47\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e18.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e62\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e57\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e68\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e48.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e19.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e63\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e60\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e70\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e27.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e50\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e19.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e64\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.2\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e63\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e72\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e28.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e51.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e65\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e66\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e74\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e53\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e66\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e69\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e27.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e76\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e54.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e67\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e3XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e72\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e28.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e78\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e56.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e68\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e75\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e80\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e31.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e58\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e69\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e27.2\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment and given in centimetres, with the inch equivalent alongside. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"97.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-fullzip__c_brown_z.jpg?v=1793740604\u0026amp;width=96\"},{\"v\":\"Navy Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-fullzip__c_navy-blue_z.jpg?v=1793740604\u0026amp;width=96\"},{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-fullzip__c_gray_z.jpg?v=1793740604\u0026amp;width=96\"},{\"v\":\"Olive Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-fullzip__c_olive-green_z.jpg?v=1793740604\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eTrue to size — regular cut\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eTake your usual size. Between sizes? Size up. The larger sizes are cut tighter - size up in XL and above.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:54.4%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Brown \/ S","offer_id":60623189508430,"sku":"SLT1010-001","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":60623189541198,"sku":"SLT1010-002","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":60623189573966,"sku":"SLT1010-003","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":60623189606734,"sku":"SLT1010-004","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 2XL","offer_id":60623189639502,"sku":"SLT1010-005","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 3XL","offer_id":60623189672270,"sku":"SLT1010-006","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ S","offer_id":60623189705038,"sku":"SLT1010-007","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ M","offer_id":60623189737806,"sku":"SLT1010-008","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ L","offer_id":60623189770574,"sku":"SLT1010-009","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ XL","offer_id":60623189803342,"sku":"SLT1010-010","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 2XL","offer_id":60623189836110,"sku":"SLT1010-011","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 3XL","offer_id":60623189868878,"sku":"SLT1010-012","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ S","offer_id":60623189901646,"sku":"SLT1010-013","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ M","offer_id":60623189934414,"sku":"SLT1010-014","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ L","offer_id":60623189967182,"sku":"SLT1010-015","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XL","offer_id":60623189999950,"sku":"SLT1010-016","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 2XL","offer_id":60623190032718,"sku":"SLT1010-017","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 3XL","offer_id":60623190065486,"sku":"SLT1010-018","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Olive Green \/ S","offer_id":60623190098254,"sku":"SLT1010-019","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Olive Green \/ M","offer_id":60623190131022,"sku":"SLT1010-020","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Olive Green \/ L","offer_id":60623190163790,"sku":"SLT1010-021","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Olive Green \/ XL","offer_id":60623190196558,"sku":"SLT1010-022","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Olive Green \/ 2XL","offer_id":60623190229326,"sku":"SLT1010-023","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Olive Green \/ 3XL","offer_id":60623190262094,"sku":"SLT1010-024","price":97.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-fullzip__01_studio.jpg?v=1793740603"},{"product_id":"corbin-quilted-lined-bomber-jacket","title":"Corbin - Quilted Lined Bomber Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Light Quilted Bomber With a Hood\u003c\/h2\u003e\n\u003cp\u003eCorbin is a light bomber jacket with a wind and shower resistant shell, a quilted lining and a practical hood that lies flat against the back.\u003c\/p\u003e\n\u003cp\u003eThe stitched padding takes the edge off a cold morning without bulk, and ample pockets hold a phone, keys and a wallet. It has a stand collar, a full-length zip and a regular fit. Four colours: black, wine red, army green and blue. Machine wash cold and hang to dry.\u003c\/p\u003e\n\u003cp\u003eSized XS to 4XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"91.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\",\"4XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dd-bomber__c_black_z.jpg?v=1793740604\u0026amp;width=96\"},{\"v\":\"Wine Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dd-bomber__c_wine-red.jpg?v=1793740605\u0026amp;width=96\"},{\"v\":\"Army Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dd-bomber__c_army-green.jpg?v=1793740605\u0026amp;width=96\"},{\"v\":\"Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dd-bomber__c_blue.jpg?v=1793740604\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Black \/ XS","offer_id":60623190294862,"sku":"SLT1011-001","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":60623190327630,"sku":"SLT1011-002","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60623190360398,"sku":"SLT1011-003","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60623190393166,"sku":"SLT1011-004","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60623190425934,"sku":"SLT1011-005","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":60623190458702,"sku":"SLT1011-006","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":60623190491470,"sku":"SLT1011-007","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 4XL","offer_id":60623190524238,"sku":"SLT1011-008","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ XS","offer_id":60623190557006,"sku":"SLT1011-009","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ S","offer_id":60623190589774,"sku":"SLT1011-010","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ M","offer_id":60623190622542,"sku":"SLT1011-011","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ L","offer_id":60623190655310,"sku":"SLT1011-012","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ XL","offer_id":60623190688078,"sku":"SLT1011-013","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ 2XL","offer_id":60623190720846,"sku":"SLT1011-014","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ 3XL","offer_id":60623190753614,"sku":"SLT1011-015","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ 4XL","offer_id":60623190786382,"sku":"SLT1011-016","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ XS","offer_id":60623190819150,"sku":"SLT1011-017","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ S","offer_id":60623190851918,"sku":"SLT1011-018","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ M","offer_id":60623190884686,"sku":"SLT1011-019","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ L","offer_id":60623190917454,"sku":"SLT1011-020","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ XL","offer_id":60623190950222,"sku":"SLT1011-021","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ 2XL","offer_id":60623190982990,"sku":"SLT1011-022","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ 3XL","offer_id":60623191015758,"sku":"SLT1011-023","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ 4XL","offer_id":60623191048526,"sku":"SLT1011-024","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XS","offer_id":60623191081294,"sku":"SLT1011-025","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ S","offer_id":60623191114062,"sku":"SLT1011-026","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ M","offer_id":60623191146830,"sku":"SLT1011-027","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ L","offer_id":60623191179598,"sku":"SLT1011-028","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XL","offer_id":60623191212366,"sku":"SLT1011-029","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 2XL","offer_id":60623191245134,"sku":"SLT1011-030","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 3XL","offer_id":60623191277902,"sku":"SLT1011-031","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 4XL","offer_id":60623191310670,"sku":"SLT1011-032","price":91.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dd-bomber__01_studio.jpg?v=1793740604"},{"product_id":"rowan-fleece-lined-insulated-hooded-jacket","title":"Rowan - Cosy-Lined Insulated Hooded Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Hooded Winter Jacket With Brushed Lining\u003c\/h2\u003e\n\u003cp\u003eRowan is a hooded winter jacket with a hard-wearing outer face, a soft brushed lining through the body and hood, and a storm flap that covers the zip.\u003c\/p\u003e\n\u003cp\u003eThe full zip opens completely and closes to the chin, and multiple zipped pockets hold their contents when you bend over. The fit is regular and non-restrictive through the shoulders. Four colours: brown, army green, blue and grey. Machine wash cold and hang to dry.\u003c\/p\u003e\n\u003cp\u003eSized 2XS to 6XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"97.99\" data-was=\"\" data-sizes='[\"2XS\",\"XS\",\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\",\"4XL\",\"5XL\",\"6XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dd-hooded__c_brown.jpg?v=1793740633\u0026amp;width=96\"},{\"v\":\"Army green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dd-hooded__c_army-green.jpg?v=1793740633\u0026amp;width=96\"},{\"v\":\"Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dd-hooded__c_blue_z.jpg?v=1793740633\u0026amp;width=96\"},{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dd-hooded__c_gray.jpg?v=1793740633\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Brown \/ 2XS","offer_id":60623191408974,"sku":"SLT1012-001","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XS","offer_id":60623191441742,"sku":"SLT1012-002","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S","offer_id":60623191474510,"sku":"SLT1012-003","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":60623191507278,"sku":"SLT1012-004","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":60623191540046,"sku":"SLT1012-005","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":60623191572814,"sku":"SLT1012-006","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 2XL","offer_id":60623191605582,"sku":"SLT1012-007","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 3XL","offer_id":60623191638350,"sku":"SLT1012-008","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 4XL","offer_id":60623191671118,"sku":"SLT1012-009","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 5XL","offer_id":60623191703886,"sku":"SLT1012-010","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 6XL","offer_id":60623191736654,"sku":"SLT1012-011","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Army green \/ 2XS","offer_id":60623191769422,"sku":"SLT1012-012","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Army green \/ XS","offer_id":60623191802190,"sku":"SLT1012-013","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Army green \/ S","offer_id":60623191834958,"sku":"SLT1012-014","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Army green \/ M","offer_id":60623191867726,"sku":"SLT1012-015","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Army green \/ L","offer_id":60623191900494,"sku":"SLT1012-016","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Army green \/ XL","offer_id":60623191933262,"sku":"SLT1012-017","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Army green \/ 2XL","offer_id":60623191966030,"sku":"SLT1012-018","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Army green \/ 3XL","offer_id":60623191998798,"sku":"SLT1012-019","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Army green \/ 4XL","offer_id":60623192031566,"sku":"SLT1012-020","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Army green \/ 5XL","offer_id":60623192064334,"sku":"SLT1012-021","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Army green \/ 6XL","offer_id":60623192097102,"sku":"SLT1012-022","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 2XS","offer_id":60623192129870,"sku":"SLT1012-023","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XS","offer_id":60623192162638,"sku":"SLT1012-024","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ S","offer_id":60623192195406,"sku":"SLT1012-025","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ M","offer_id":60623192228174,"sku":"SLT1012-026","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ L","offer_id":60623192260942,"sku":"SLT1012-027","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XL","offer_id":60623192293710,"sku":"SLT1012-028","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 2XL","offer_id":60623192326478,"sku":"SLT1012-029","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 3XL","offer_id":60623192359246,"sku":"SLT1012-030","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 4XL","offer_id":60623192392014,"sku":"SLT1012-031","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 5XL","offer_id":60623192424782,"sku":"SLT1012-032","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 6XL","offer_id":60623192457550,"sku":"SLT1012-033","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 2XS","offer_id":60623192490318,"sku":"SLT1012-034","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XS","offer_id":60623192523086,"sku":"SLT1012-035","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ S","offer_id":60623192555854,"sku":"SLT1012-036","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ M","offer_id":60623192588622,"sku":"SLT1012-037","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ L","offer_id":60623192621390,"sku":"SLT1012-038","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XL","offer_id":60623192654158,"sku":"SLT1012-039","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 2XL","offer_id":60623192686926,"sku":"SLT1012-040","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 3XL","offer_id":60623192719694,"sku":"SLT1012-041","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 4XL","offer_id":60623192752462,"sku":"SLT1012-042","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 5XL","offer_id":60623192785230,"sku":"SLT1012-043","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 6XL","offer_id":60623192817998,"sku":"SLT1012-044","price":97.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dd-hooded__01_studio.jpg?v=1793740604"},{"product_id":"sutton-long-hooded-raincoat","title":"Sutton - Long Hooded Raincoat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Long Waterproof Hooded Raincoat\u003c\/h2\u003e\n\u003cp\u003eSutton is a full-length hooded raincoat with a fully waterproof face, sealed seams and a fixed hood that stays up in wind.\u003c\/p\u003e\n\u003cp\u003eThe quick-drying face lets rain bead and run off, and the length falls past the knee to cover the legs. It has a loose fit to go over a coat and packs down small enough for a rucksack. Wipe clean and hang to dry.\u003c\/p\u003e\n\u003cp\u003eSized L to XXXL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"65.99\" data-was=\"\" data-sizes='[\"L\",\"XL\",\"XXL\",\"XXXL\"]'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"L","offer_id":60623193243982,"sku":"SLT1013-001","price":65.99,"currency_code":"USD","in_stock":true},{"title":"XL","offer_id":60623193276750,"sku":"SLT1013-002","price":65.99,"currency_code":"USD","in_stock":true},{"title":"XXL","offer_id":60623193309518,"sku":"SLT1013-003","price":65.99,"currency_code":"USD","in_stock":true},{"title":"XXXL","offer_id":60623193342286,"sku":"SLT1013-004","price":65.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/nn-raincoat__01_studio.jpg?v=1793740633"},{"product_id":"bracken-sherpa-lined-hooded-plaid-jacket","title":"Bracken - Plush-Lined Hooded Plaid Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Hooded Plaid Jacket With Plush Lining\u003c\/h2\u003e\n\u003cp\u003eBracken is a hooded plaid jacket with a deep-pile plush lining through the body and an attached hood lined to match.\u003c\/p\u003e\n\u003cp\u003eThe brushed check face is matte and soft, and the button-through front layers flat over a hoodie or a knit. The relaxed hip-length cut works as an outer layer on a cold day. Six colours: grey, coffee, dark blue, brown, army green and blue. Machine wash cold and hang to dry.\u003c\/p\u003e\n\u003cp\u003eSized XS to 2XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"117.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/wc-sherpa__c_gray.jpg?v=1793740634\u0026amp;width=96\"},{\"v\":\"Coffee\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/wc-sherpa__c_coffee.jpg?v=1793740635\u0026amp;width=96\"},{\"v\":\"Dark Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/wc-sherpa__c_dark-blue.jpg?v=1793740634\u0026amp;width=96\"},{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/wc-sherpa__c_brown.jpg?v=1793740633\u0026amp;width=96\"},{\"v\":\"Army Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/wc-sherpa__c_army-green.jpg?v=1793740634\u0026amp;width=96\"},{\"v\":\"Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/wc-sherpa__c_blue.jpg?v=1793740634\u0026amp;width=96\"},{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/wc-sherpa__c_khaki.jpg?v=1793740661\u0026amp;width=96\"},{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/wc-sherpa__c_red.jpg?v=1793740660\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Gray \/ XS","offer_id":60623194095950,"sku":"SLT1014-001","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ S","offer_id":60623194128718,"sku":"SLT1014-002","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ M","offer_id":60623194161486,"sku":"SLT1014-003","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ L","offer_id":60623194194254,"sku":"SLT1014-004","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XL","offer_id":60623194227022,"sku":"SLT1014-005","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 2XL","offer_id":60623194259790,"sku":"SLT1014-006","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Coffee \/ XS","offer_id":60623194292558,"sku":"SLT1014-007","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Coffee \/ S","offer_id":60623194325326,"sku":"SLT1014-008","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Coffee \/ M","offer_id":60623194358094,"sku":"SLT1014-009","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Coffee \/ L","offer_id":60623194390862,"sku":"SLT1014-010","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Coffee \/ XL","offer_id":60623194423630,"sku":"SLT1014-011","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Coffee \/ 2XL","offer_id":60623194456398,"sku":"SLT1014-012","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ XS","offer_id":60623194489166,"sku":"SLT1014-013","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ S","offer_id":60623194521934,"sku":"SLT1014-014","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ M","offer_id":60623194554702,"sku":"SLT1014-015","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ L","offer_id":60623194587470,"sku":"SLT1014-016","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ XL","offer_id":60623194620238,"sku":"SLT1014-017","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ 2XL","offer_id":60623194653006,"sku":"SLT1014-018","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XS","offer_id":60623194685774,"sku":"SLT1014-019","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S","offer_id":60623194718542,"sku":"SLT1014-020","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":60623194751310,"sku":"SLT1014-021","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":60623194784078,"sku":"SLT1014-022","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":60623194816846,"sku":"SLT1014-023","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 2XL","offer_id":60623194849614,"sku":"SLT1014-024","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ XS","offer_id":60623194882382,"sku":"SLT1014-025","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ S","offer_id":60623194915150,"sku":"SLT1014-026","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ M","offer_id":60623194947918,"sku":"SLT1014-027","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ L","offer_id":60623194980686,"sku":"SLT1014-028","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ XL","offer_id":60623195013454,"sku":"SLT1014-029","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ 2XL","offer_id":60623195046222,"sku":"SLT1014-030","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XS","offer_id":60623195078990,"sku":"SLT1014-031","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ S","offer_id":60623195111758,"sku":"SLT1014-032","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ M","offer_id":60623195144526,"sku":"SLT1014-033","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ L","offer_id":60623195177294,"sku":"SLT1014-034","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XL","offer_id":60623195210062,"sku":"SLT1014-035","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 2XL","offer_id":60623195242830,"sku":"SLT1014-036","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XS","offer_id":60623195275598,"sku":"SLT1014-037","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ S","offer_id":60623195308366,"sku":"SLT1014-038","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ M","offer_id":60623195341134,"sku":"SLT1014-039","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ L","offer_id":60623195373902,"sku":"SLT1014-040","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XL","offer_id":60623195406670,"sku":"SLT1014-041","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 2XL","offer_id":60623195439438,"sku":"SLT1014-042","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XS","offer_id":60623195472206,"sku":"SLT1014-043","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ S","offer_id":60623195504974,"sku":"SLT1014-044","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ M","offer_id":60623195537742,"sku":"SLT1014-045","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ L","offer_id":60623195570510,"sku":"SLT1014-046","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XL","offer_id":60623195603278,"sku":"SLT1014-047","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 2XL","offer_id":60623195636046,"sku":"SLT1014-048","price":117.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/wc-sherpa__01_studio_ecded00d-1d2c-4b53-b6c9-ad82177bcd21.jpg?v=1793740634"},{"product_id":"halston-slim-fit-stand-collar-leather-look-jacket","title":"Halston - Slim-Fit Stand Collar Polished Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Slim Polished Jacket With Quilted Shoulders\u003c\/h2\u003e\n\u003cp\u003eHalston is a slim-fit jacket with a stand collar, quilted panels across the shoulders and a smooth polished coated face.\u003c\/p\u003e\n\u003cp\u003eTwin side zip pockets and a chest zip pocket keep the front clean, and the body follows the chest and waist to a waist-length hem. It has a full lining and comes in four colours: black, camel, navy and red. Wipe clean with a dry or slightly damp cloth.\u003c\/p\u003e\n\u003cp\u003eSized S to 5XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"104.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\",\"4XL\",\"5XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/hg-leather__c_black.jpg?v=1793740660\u0026amp;width=96\"},{\"v\":\"Camel\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/hg-leather__c_camel.jpg?v=1793740660\u0026amp;width=96\"},{\"v\":\"Navy Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/hg-leather__c_navy-blue.jpg?v=1793740661\u0026amp;width=96\"},{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/hg-leather__c_red.jpg?v=1793740661\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Black \/ S","offer_id":60623199633742,"sku":"SLT1015-001","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60623199666510,"sku":"SLT1015-002","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60623199699278,"sku":"SLT1015-003","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60623199732046,"sku":"SLT1015-004","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":60623199764814,"sku":"SLT1015-005","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":60623199797582,"sku":"SLT1015-006","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 4XL","offer_id":60623199830350,"sku":"SLT1015-007","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 5XL","offer_id":60623199863118,"sku":"SLT1015-008","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ S","offer_id":60623199895886,"sku":"SLT1015-009","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ M","offer_id":60623199928654,"sku":"SLT1015-010","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ L","offer_id":60623199961422,"sku":"SLT1015-011","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ XL","offer_id":60623199994190,"sku":"SLT1015-012","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ 2XL","offer_id":60623200026958,"sku":"SLT1015-013","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ 3XL","offer_id":60623200059726,"sku":"SLT1015-014","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ 4XL","offer_id":60623200092494,"sku":"SLT1015-015","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ 5XL","offer_id":60623200125262,"sku":"SLT1015-016","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ S","offer_id":60623200158030,"sku":"SLT1015-017","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ M","offer_id":60623200190798,"sku":"SLT1015-018","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ L","offer_id":60623200223566,"sku":"SLT1015-019","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ XL","offer_id":60623200256334,"sku":"SLT1015-020","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 2XL","offer_id":60623200289102,"sku":"SLT1015-021","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 3XL","offer_id":60623200321870,"sku":"SLT1015-022","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 4XL","offer_id":60623200354638,"sku":"SLT1015-023","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 5XL","offer_id":60623200387406,"sku":"SLT1015-024","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ S","offer_id":60623200420174,"sku":"SLT1015-025","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ M","offer_id":60623200452942,"sku":"SLT1015-026","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ L","offer_id":60623200485710,"sku":"SLT1015-027","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XL","offer_id":60623200518478,"sku":"SLT1015-028","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 2XL","offer_id":60623200551246,"sku":"SLT1015-029","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 3XL","offer_id":60623200584014,"sku":"SLT1015-030","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 4XL","offer_id":60623200616782,"sku":"SLT1015-031","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 5XL","offer_id":60623200649550,"sku":"SLT1015-032","price":104.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/hg-leather__01_studio.jpg?v=1793740660"},{"product_id":"weston-classic-fit-denim-trucker-jacket","title":"Weston - Classic Fit Trucker Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Classic Trucker Jacket With Nothing Added\u003c\/h2\u003e\n\u003cp\u003eWeston is a trucker jacket with a button-through front, two buttoned chest pockets and a flat, pointed collar.\u003c\/p\u003e\n\u003cp\u003eThe sturdy woven fabric gives a structured, unlined body that softens as you wear it. The waist-length cut goes over everything and under a coat. Five colours: black, blue, wine red, dark green and dark blue. Machine wash cold on a gentle cycle and air dry.\u003c\/p\u003e\n\u003cp\u003eSized XS to 4XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"84.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\",\"4XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/hg-denim__c_black.jpg?v=1793740661\u0026amp;width=96\"},{\"v\":\"Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/hg-denim__c_blue.jpg?v=1793740661\u0026amp;width=96\"},{\"v\":\"Wine Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/hg-denim__c_wine-red.jpg?v=1793740661\u0026amp;width=96\"},{\"v\":\"Dark Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/hg-denim__c_dark-green.jpg?v=1793740662\u0026amp;width=96\"},{\"v\":\"Dark Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/hg-denim__c_dark-blue_z.jpg?v=1793740661\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Black \/ XS","offer_id":60623201009998,"sku":"SLT1016-001","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":60623201042766,"sku":"SLT1016-002","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60623201075534,"sku":"SLT1016-003","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60623201108302,"sku":"SLT1016-004","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60623201141070,"sku":"SLT1016-005","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":60623201173838,"sku":"SLT1016-006","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":60623201206606,"sku":"SLT1016-007","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 4XL","offer_id":60623201239374,"sku":"SLT1016-008","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XS","offer_id":60623201272142,"sku":"SLT1016-009","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ S","offer_id":60623201304910,"sku":"SLT1016-010","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ M","offer_id":60623201337678,"sku":"SLT1016-011","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ L","offer_id":60623201370446,"sku":"SLT1016-012","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XL","offer_id":60623201403214,"sku":"SLT1016-013","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 2XL","offer_id":60623201435982,"sku":"SLT1016-014","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 3XL","offer_id":60623201468750,"sku":"SLT1016-015","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 4XL","offer_id":60623201501518,"sku":"SLT1016-016","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ XS","offer_id":60623201534286,"sku":"SLT1016-017","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ S","offer_id":60623201567054,"sku":"SLT1016-018","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ M","offer_id":60623201599822,"sku":"SLT1016-019","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ L","offer_id":60623201632590,"sku":"SLT1016-020","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ XL","offer_id":60623201665358,"sku":"SLT1016-021","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ 2XL","offer_id":60623201698126,"sku":"SLT1016-022","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ 3XL","offer_id":60623201730894,"sku":"SLT1016-023","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ 4XL","offer_id":60623201763662,"sku":"SLT1016-024","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ XS","offer_id":60623201796430,"sku":"SLT1016-025","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ S","offer_id":60623201829198,"sku":"SLT1016-026","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ M","offer_id":60623201861966,"sku":"SLT1016-027","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ L","offer_id":60623201894734,"sku":"SLT1016-028","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ XL","offer_id":60623201927502,"sku":"SLT1016-029","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ 2XL","offer_id":60623201960270,"sku":"SLT1016-030","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ 3XL","offer_id":60623201993038,"sku":"SLT1016-031","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ 4XL","offer_id":60623202025806,"sku":"SLT1016-032","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ XS","offer_id":60623202058574,"sku":"SLT1016-033","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ S","offer_id":60623202091342,"sku":"SLT1016-034","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ M","offer_id":60623202124110,"sku":"SLT1016-035","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ L","offer_id":60623202156878,"sku":"SLT1016-036","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ XL","offer_id":60623202189646,"sku":"SLT1016-037","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ 2XL","offer_id":60623202222414,"sku":"SLT1016-038","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ 3XL","offer_id":60623202255182,"sku":"SLT1016-039","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ 4XL","offer_id":60623202287950,"sku":"SLT1016-040","price":84.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/hg-denim__01_studio.jpg?v=1793740661"},{"product_id":"rutherford-waxed-trucker-jacket","title":"Rutherford - Waxed Trucker Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Waxed Trucker That Sheds Rain\u003c\/h2\u003e\n\u003cp\u003eRutherford is a trucker jacket with structured seams, chest pockets, a flat collar and a waxed water-resistant face that turns rain instead of soaking it up.\u003c\/p\u003e\n\u003cp\u003eThe soft inner lining moves easily over a jumper. The finish marks and fades at the creases and develops character with wear. Three colours: brown, army green and coffee. Spot clean only.\u003c\/p\u003e\n\u003cp\u003eSized M to 4XL. The sizing table below gives the maker's garment measurements for each size.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eChest\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eWaist\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e38-40\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e32-34\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42-44\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e36-38\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e27\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e46-48\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e40-42\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e28\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e50-52\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e44-46\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e3XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e54-56\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e48-50\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e27\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e58-60\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e52-54\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e31\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e27.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment and given in inches. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"123.99\" data-was=\"\" data-sizes='[\"M\",\"L\",\"XL\",\"2XL\",\"3XL\",\"4XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/gl-trucker__c_brown.jpg?v=1793740687\u0026amp;width=96\"},{\"v\":\"Army green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/gl-trucker__c_army-green.jpg?v=1793740687\u0026amp;width=96\"},{\"v\":\"Coffee\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/gl-trucker__c_coffee.jpg?v=1793740687\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eTrue to size\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eTake your usual size. Between sizes? Size up.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:50.0%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Brown \/ M","offer_id":60623203008846,"sku":"SLT1017-001","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":60623203041614,"sku":"SLT1017-002","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":60623203074382,"sku":"SLT1017-003","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 2XL","offer_id":60623203107150,"sku":"SLT1017-004","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 3XL","offer_id":60623203139918,"sku":"SLT1017-005","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 4XL","offer_id":60623203172686,"sku":"SLT1017-006","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Army green \/ M","offer_id":60623203205454,"sku":"SLT1017-007","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Army green \/ L","offer_id":60623203238222,"sku":"SLT1017-008","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Army green \/ XL","offer_id":60623203270990,"sku":"SLT1017-009","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Army green \/ 2XL","offer_id":60623203303758,"sku":"SLT1017-010","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Army green \/ 3XL","offer_id":60623203336526,"sku":"SLT1017-011","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Army green \/ 4XL","offer_id":60623203369294,"sku":"SLT1017-012","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Coffee \/ M","offer_id":60623203402062,"sku":"SLT1017-013","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Coffee \/ L","offer_id":60623203434830,"sku":"SLT1017-014","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Coffee \/ XL","offer_id":60623203467598,"sku":"SLT1017-015","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Coffee \/ 2XL","offer_id":60623203500366,"sku":"SLT1017-016","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Coffee \/ 3XL","offer_id":60623203533134,"sku":"SLT1017-017","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Coffee \/ 4XL","offer_id":60623203565902,"sku":"SLT1017-018","price":123.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/gl-trucker__01_studio.jpg?v=1793740661"},{"product_id":"aveline-denim-panel-cropped-bomber","title":"Aveline - Contrast-Panel Cropped Bomber","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Cropped Bomber With A Contrast Front Panel\u003c\/h2\u003e\n\u003cp\u003eAveline is a cropped bomber in a soft brushed sweatshirt pile with a mid-blue panel in a sturdy woven fabric either side of a chunky exposed two-way zip. The back is plain, and the jacket ends at the natural waist on a ribbed band.\u003c\/p\u003e\n\u003cp\u003eThe balloon sleeves are full through the upper arm and gather into deep ribbed cuffs. A soft spread collar and deep side seam pockets complete it, and the fit is oversized through the body. Five colours: black, brown, grey, olive and royal blue. Machine wash cold and hang to dry.\u003c\/p\u003e\n\u003cp\u003eSized S to XS. The sizing table below gives the body measurements each size fits.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eAU\/UK\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eEU\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eWaist\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eHip\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e00-0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2-4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30-32\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.9-31.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.8-24.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e34.3-35.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e0-2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4-6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e32-34\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e31.5-33.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.4-26.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e35.0-36.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2-4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e6-8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e34-36\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e33.1-34.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.0-27.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e36.6-38.2\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4-6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e10-12\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e38-40\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e35.0-37.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e28.0-30.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e38.6-40.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8-10\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e14-16\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42-44\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e37.4-39.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30.3-32.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e40.9-43.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e10-12\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e18-20\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e46\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e39.8-42.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e32.7-35.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e43.3-45.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12-14\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22-24\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e48-50\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42.1-44.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e35.0-37.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e45.7-48.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eThis table lists BODY measurements, not garment measurements - measure yourself and pick the size whose range you fall into. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"91.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"XXL\",\"XS\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-denimpatch__01_studio.jpg?v=1793740688\u0026amp;width=96\"},{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-denimpatch__c_gray_studio.jpg?v=1793740688\u0026amp;width=96\"},{\"v\":\"Olive\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-denimpatch__c_olive_studio.jpg?v=1793740709\u0026amp;width=96\"},{\"v\":\"Royal\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-denimpatch__c_royal_studio.jpg?v=1793740709\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-denimpatch__c_black_studio.jpg?v=1793740709\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eTrue to size\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eTake your usual size. Between sizes? Size up. The larger sizes are cut tighter - size up in XL and above.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:47.8%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Brown \/ S","offer_id":60632280006990,"sku":"SLT1027-001","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":60632280039758,"sku":"SLT1027-002","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":60632280072526,"sku":"SLT1027-003","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":60632280105294,"sku":"SLT1027-004","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XXL","offer_id":60632280138062,"sku":"SLT1027-005","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ S","offer_id":60632280170830,"sku":"SLT1027-006","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ M","offer_id":60632280203598,"sku":"SLT1027-007","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ L","offer_id":60632280236366,"sku":"SLT1027-008","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XL","offer_id":60632280269134,"sku":"SLT1027-009","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XXL","offer_id":60632280301902,"sku":"SLT1027-010","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Olive \/ S","offer_id":60632280334670,"sku":"SLT1027-011","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Olive \/ M","offer_id":60632280367438,"sku":"SLT1027-012","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Olive \/ L","offer_id":60632280400206,"sku":"SLT1027-013","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Olive \/ XL","offer_id":60632280432974,"sku":"SLT1027-014","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Olive \/ XXL","offer_id":60632280465742,"sku":"SLT1027-015","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Royal \/ S","offer_id":60632280498510,"sku":"SLT1027-016","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Royal \/ M","offer_id":60632280531278,"sku":"SLT1027-017","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Royal \/ L","offer_id":60632280564046,"sku":"SLT1027-018","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Royal \/ XL","offer_id":60632280596814,"sku":"SLT1027-019","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Royal \/ XXL","offer_id":60632280629582,"sku":"SLT1027-020","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XS","offer_id":60632280662350,"sku":"SLT1027-021","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":60632280695118,"sku":"SLT1027-022","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60632280727886,"sku":"SLT1027-023","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60632280760654,"sku":"SLT1027-024","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60632280793422,"sku":"SLT1027-025","price":91.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-denimpatch__01_studio.jpg?v=1793740688"},{"product_id":"nadia-cropped-cut-out-puffer-jacket","title":"Nadia - Cropped Cut-Out Puffer Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Cropped Puffer With A Crossover Collar\u003c\/h2\u003e\n\u003cp\u003eNadia is a cropped puffer jacket with a tall padded stand collar that wraps across itself at the throat like a built-in scarf, leaving an open triangle at the centre chest. The quilted body stops above the ribcage.\u003c\/p\u003e\n\u003cp\u003eThe sleeves are full length and padded, with horizontal quilt channels from shoulder to cuff. The matte quilted shell is wind-resistant with a lightweight insulating fill, and the fit is close through the body. Three colours: black, grey and ivory. Machine wash cold and do not tumble dry.\u003c\/p\u003e\n\u003cp\u003eSized XS to XL. The sizing table below gives the body measurements each size fits.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eAU\/UK\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eEU\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eWaist\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eHip\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e00-0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2-4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30-32\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.9-31.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.8-24.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e34.3-35.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e0-2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4-6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e32-34\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e31.5-33.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.4-26.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e35.0-36.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2-4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e6-8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e34-36\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e33.1-34.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.0-27.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e36.6-38.2\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4-6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e10-12\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e38-40\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e35.0-37.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e28.0-30.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e38.6-40.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8-10\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e14-16\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42-44\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e37.4-39.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30.3-32.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e40.9-43.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e10-12\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e18-20\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e46\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e39.8-42.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e32.7-35.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e43.3-45.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12-14\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22-24\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e48-50\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42.1-44.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e35.0-37.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e45.7-48.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eThis table lists BODY measurements, not garment measurements - measure yourself and pick the size whose range you fall into. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"84.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-puffer__01_studio.jpg?v=1793740709\u0026amp;width=96\"},{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-puffer__c_gray_studio.jpg?v=1793740709\u0026amp;width=96\"},{\"v\":\"Ivory\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-puffer__c_ivory_studio.jpg?v=1793740710\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eTrue to size\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eTake your usual size. Between sizes? Size up. The larger sizes are cut tighter - size up in XL and above.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:47.8%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Black \/ XS","offer_id":60632284987726,"sku":"SLT1028-001","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":60632285020494,"sku":"SLT1028-002","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60632285053262,"sku":"SLT1028-003","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60632285086030,"sku":"SLT1028-004","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60632285118798,"sku":"SLT1028-005","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XS","offer_id":60632285151566,"sku":"SLT1028-006","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ S","offer_id":60632285184334,"sku":"SLT1028-007","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ M","offer_id":60632285217102,"sku":"SLT1028-008","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ L","offer_id":60632285249870,"sku":"SLT1028-009","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XL","offer_id":60632285282638,"sku":"SLT1028-010","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Ivory \/ XS","offer_id":60632285315406,"sku":"SLT1028-011","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Ivory \/ S","offer_id":60632285348174,"sku":"SLT1028-012","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Ivory \/ M","offer_id":60632285380942,"sku":"SLT1028-013","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Ivory \/ L","offer_id":60632285413710,"sku":"SLT1028-014","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Ivory \/ XL","offer_id":60632285446478,"sku":"SLT1028-015","price":84.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-puffer__01_studio.jpg?v=1793740709"},{"product_id":"imogen-double-breasted-wool-blend-swing-jacket","title":"Imogen - Double-Breasted Soft-Blend Swing Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Short Double-Breasted Jacket Cut To Swing\u003c\/h2\u003e\n\u003cp\u003eImogen is a short jacket with no lapel, a low stand collar and two columns of dark horn-look buttons in a double-breasted front. The shoulder is dropped, and the body widens from the chest down so it swings rather than hangs.\u003c\/p\u003e\n\u003cp\u003eAngled welt pockets are set into the front seams, and the jacket finishes at the hip. The soft-brushed coating fabric is lined smooth inside. Four colours: black, brown, grey and khaki. Dry clean.\u003c\/p\u003e\n\u003cp\u003eSized XS to XL. The sizing table below gives the maker's garment measurements for each size.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e0.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e51.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e104\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e40.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e52.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e65\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e1.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e53\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e108\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e53\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e66\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e54.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e112\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e44.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e53.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e67\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8\/10\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e-\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e56.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e118\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e46.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e54.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e68\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e58.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e124\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e48.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e55.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e69\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e27.2\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e14\/16\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e-\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e61.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e130\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e51.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e55.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e70\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e27.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment and given in centimetres, with the inch equivalent alongside. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"110.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-buttondown__01_studio.jpg?v=1793740709\u0026amp;width=96\"},{\"v\":\"Grey\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-buttondown__c_grey_studio.jpg?v=1793740709\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-buttondown__c_black_studio.jpg?v=1793740709\u0026amp;width=96\"},{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-buttondown__c_khaki_studio.jpg?v=1793740709\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eRuns large — relaxed cut\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eSize down. Between sizes? Take the smaller size. The larger sizes are cut tighter - size up in XL and above.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:70.5%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Brown \/ XS","offer_id":60632286396750,"sku":"SLT1029-001","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S","offer_id":60632286429518,"sku":"SLT1029-002","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":60632286462286,"sku":"SLT1029-003","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":60632286495054,"sku":"SLT1029-004","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":60632286527822,"sku":"SLT1029-005","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ XS","offer_id":60632286560590,"sku":"SLT1029-006","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ S","offer_id":60632286593358,"sku":"SLT1029-007","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ M","offer_id":60632286626126,"sku":"SLT1029-008","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ L","offer_id":60632286658894,"sku":"SLT1029-009","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ XL","offer_id":60632286691662,"sku":"SLT1029-010","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XS","offer_id":60632286724430,"sku":"SLT1029-011","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":60632286757198,"sku":"SLT1029-012","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60632286789966,"sku":"SLT1029-013","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60632286822734,"sku":"SLT1029-014","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60632286855502,"sku":"SLT1029-015","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XS","offer_id":60632286888270,"sku":"SLT1029-016","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ S","offer_id":60632286921038,"sku":"SLT1029-017","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ M","offer_id":60632286953806,"sku":"SLT1029-018","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ L","offer_id":60632286986574,"sku":"SLT1029-019","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XL","offer_id":60632287019342,"sku":"SLT1029-020","price":110.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-buttondown__01_studio.jpg?v=1793740709"},{"product_id":"ophelia-cropped-faux-fur-jacket","title":"Ophelia - Cropped Faux Fur Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Cropped Plush Jacket With A Wide Roll Collar\u003c\/h2\u003e\n\u003cp\u003eOphelia is a cropped jacket made entirely of long-pile plush, with the body, sleeves and a wide roll collar in the same fabric. It fastens on concealed hooks, so nothing interrupts the pile at the front.\u003c\/p\u003e\n\u003cp\u003eIt stops at the top of the hip and is boxy and relaxed through the body. The smooth full lining slides over knitwear, and the deep matte black has no sheen and no hardware. Dry clean only.\u003c\/p\u003e\n\u003cp\u003eSized XS to XL. The sizing table below gives the maker's garment measurements for each size.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e0.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e51.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e110\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e43.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e52.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e56.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e1.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e53\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e114\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e44.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e53\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e57\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e54.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e118\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e46.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e53.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e57.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8\/10\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e-\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e56.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e124\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e48.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e54.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e58.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e58.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e130\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e51.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e55.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e59.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment and given in centimetres, with the inch equivalent alongside. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"130.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-furcollar__c_black.jpg?v=1793740733\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eRuns large — oversized cut\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eSize down. Between sizes? Take the smaller size. The larger sizes are cut tighter - size up in XL and above.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:88.1%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Black \/ XS","offer_id":60632287576398,"sku":"SLT1030-001","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":60632287609166,"sku":"SLT1030-002","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60632287641934,"sku":"SLT1030-003","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60632287674702,"sku":"SLT1030-004","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60632287707470,"sku":"SLT1030-005","price":130.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-furcollar__01_studio.jpg?v=1793740709"},{"product_id":"cordelia-belted-herringbone-check-coat","title":"Cordelia - Belted Herringbone Check Coat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Tailored Check Coat That Ties At The Waist\u003c\/h2\u003e\n\u003cp\u003eCordelia is a tailored coat with a wide notch lapel, a double-breasted front and a wide self-tie belt with belt loops that pulls the waist in. The cloth is a fine brown herringbone with a soft windowpane check over it.\u003c\/p\u003e\n\u003cp\u003eIt runs to just below the knee and flares slightly from the belt. The shoulder is lightly padded to hold the tailored line when it is worn open, and the coat is fully lined. Dry clean, or hand wash cold and hang to dry.\u003c\/p\u003e\n\u003cp\u003eSized XS to XL. The sizing table below gives the body measurements each size fits.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUK\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eEU\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eWaist (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eWaist (in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXXS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e00\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e78-80\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30.7-31.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e61\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e32\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e81-83\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e31.9-32.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e64\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.2\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2-4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e6-8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e34-36\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e84-89\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e33.1-35.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e67-70\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.4-27.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e6-8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e10-12\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e38-40\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e90-95\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e35.4-37.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e73-76\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e28.7-29.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e10-12\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e14-16\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42-44\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e96-101\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e37.8-39.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e79-82\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e31.1-32.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e14-16\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e18-20\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e46-48\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e102-110\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e40.2-43.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e86-90\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e33.9-35.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e18-20\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22-24\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e50-52\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e111-116\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e43.7-45.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e94-98\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e37.0-38.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e3XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20-22\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24-26\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e52-54\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e117-124\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e46.1-48.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e98-106\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e38.6-41.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eThis table lists BODY measurements, not garment measurements - measure yourself and pick the size whose range you fall into. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"143.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Coffee\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rh-beltedcoat__c_coffee.jpg?v=1793740734\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eTrue to size\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eTake your usual size. Between sizes? Size up. The larger sizes are cut tighter - size up in XL and above.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:47.8%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Coffee \/ XS","offer_id":60632289050958,"sku":"SLT1031-001","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Coffee \/ S","offer_id":60632289083726,"sku":"SLT1031-002","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Coffee \/ M","offer_id":60632289116494,"sku":"SLT1031-003","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Coffee \/ L","offer_id":60632289149262,"sku":"SLT1031-004","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Coffee \/ XL","offer_id":60632289182030,"sku":"SLT1031-005","price":143.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rh-beltedcoat__01_studio.jpg?v=1793740733"},{"product_id":"verity-velvet-trim-fit-and-flare-swing-coat","title":"Verity - Plush-Trim Fit-And-Flare Swing Coat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Nipped-Waist Swing Coat With Plush Trim\u003c\/h2\u003e\n\u003cp\u003eVerity is a fit-and-flare coat that is fitted through the bust and waist, then released into a full A-line skirt below the knee. The collar, deep turn-back cuffs and hip flap pockets are all in contrast plush fabric.\u003c\/p\u003e\n\u003cp\u003eThe front is double-breasted with contrast buttons, and the coat is made from a firm woven fabric and fully lined. Three colours: dark green, blue and red. Dry clean only.\u003c\/p\u003e\n\u003cp\u003eSized S to XXL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"130.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"XXL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Dark Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rs-buttoncoat__01_studio.jpg?v=1793740733\u0026amp;width=96\"},{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rs-buttoncoat__c_red_studio.jpg?v=1793740733\u0026amp;width=96\"},{\"v\":\"Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rs-buttoncoat__c_blue_studio.jpg?v=1793740733\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Dark Green \/ S","offer_id":60632289804622,"sku":"SLT1032-001","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ M","offer_id":60632289837390,"sku":"SLT1032-002","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ L","offer_id":60632289870158,"sku":"SLT1032-003","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ XL","offer_id":60632289902926,"sku":"SLT1032-004","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ XXL","offer_id":60632289935694,"sku":"SLT1032-005","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ S","offer_id":60632289968462,"sku":"SLT1032-006","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ M","offer_id":60632290001230,"sku":"SLT1032-007","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ L","offer_id":60632290033998,"sku":"SLT1032-008","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XL","offer_id":60632290066766,"sku":"SLT1032-009","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XXL","offer_id":60632290099534,"sku":"SLT1032-010","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ S","offer_id":60632290132302,"sku":"SLT1032-011","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ M","offer_id":60632290165070,"sku":"SLT1032-012","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ L","offer_id":60632290197838,"sku":"SLT1032-013","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XL","offer_id":60632290230606,"sku":"SLT1032-014","price":130.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XXL","offer_id":60632290263374,"sku":"SLT1032-015","price":130.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rs-buttoncoat__01_studio.jpg?v=1793740733"},{"product_id":"giselle-faux-fur-collar-belted-swing-coat","title":"Giselle - Faux-Fur Collar Belted Swing Coat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Belted Swing Coat With A Removable Collar\u003c\/h2\u003e\n\u003cp\u003eGiselle is a double-breasted swing coat with a soft plush collar that buttons on and off, a self-tie belt that knots at the front and a skirt that breaks into deep flutes below the waist.\u003c\/p\u003e\n\u003cp\u003eButtoned tabs finish the cuffs and the coat is lined, in a brushed woven fabric that stops above the knee. Five colours: true red, black, dark blue, grey and khaki. Dry clean only.\u003c\/p\u003e\n\u003cp\u003eSized S to XXL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"123.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"XXL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"True Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rs-furcollar__01_studio.jpg?v=1793740733\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rs-furcollar__c_black_studio.jpg?v=1793740733\u0026amp;width=96\"},{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rs-furcollar__c_khaki_studio.jpg?v=1793740734\u0026amp;width=96\"},{\"v\":\"Dark Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rs-furcollar__c_dark-blue_studio.jpg?v=1793740754\u0026amp;width=96\"},{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rs-furcollar__c_gray_studio.jpg?v=1793740755\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"True Red \/ S","offer_id":60632290885966,"sku":"SLT1033-001","price":123.99,"currency_code":"USD","in_stock":true},{"title":"True Red \/ M","offer_id":60632290918734,"sku":"SLT1033-002","price":123.99,"currency_code":"USD","in_stock":true},{"title":"True Red \/ L","offer_id":60632290951502,"sku":"SLT1033-003","price":123.99,"currency_code":"USD","in_stock":true},{"title":"True Red \/ XL","offer_id":60632290984270,"sku":"SLT1033-004","price":123.99,"currency_code":"USD","in_stock":true},{"title":"True Red \/ XXL","offer_id":60632291017038,"sku":"SLT1033-005","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":60632291049806,"sku":"SLT1033-006","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60632291082574,"sku":"SLT1033-007","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60632291115342,"sku":"SLT1033-008","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60632291148110,"sku":"SLT1033-009","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XXL","offer_id":60632291180878,"sku":"SLT1033-010","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ S","offer_id":60632291213646,"sku":"SLT1033-011","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ M","offer_id":60632291246414,"sku":"SLT1033-012","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ L","offer_id":60632291279182,"sku":"SLT1033-013","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XL","offer_id":60632291311950,"sku":"SLT1033-014","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XXL","offer_id":60632291344718,"sku":"SLT1033-015","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ S","offer_id":60632291377486,"sku":"SLT1033-016","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ M","offer_id":60632291410254,"sku":"SLT1033-017","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ L","offer_id":60632291443022,"sku":"SLT1033-018","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ XL","offer_id":60632291475790,"sku":"SLT1033-019","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ XXL","offer_id":60632291508558,"sku":"SLT1033-020","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ S","offer_id":60632291541326,"sku":"SLT1033-021","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ M","offer_id":60632291574094,"sku":"SLT1033-022","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ L","offer_id":60632291606862,"sku":"SLT1033-023","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XL","offer_id":60632291639630,"sku":"SLT1033-024","price":123.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XXL","offer_id":60632291672398,"sku":"SLT1033-025","price":123.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rs-furcollar__01_studio.jpg?v=1793740733"},{"product_id":"sylvie-cropped-faux-leather-jacket","title":"Sylvie - Cropped Polished Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Short Oxblood Jacket With A Pointed Collar\u003c\/h2\u003e\n\u003cp\u003eSylvie is a boxy, cropped jacket with a pointed shirt collar, a single silver-tone zip up the front and short zips at the cuffs so the sleeve sits close. It stops at the top of the hip and holds a square shape.\u003c\/p\u003e\n\u003cp\u003eThe smooth polished fabric is a deep oxblood with a worn, low-shine finish rather than a wet-look gloss, and the jacket is lined. Wipe clean and do not machine wash.\u003c\/p\u003e\n\u003cp\u003eSized S to L. The sizing table below gives the maker's garment measurements for each size.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (cm)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e43\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e110\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e18\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e45\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e61\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e59\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e45\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e114\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e18\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e46\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e62\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e60\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e46\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e118\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e19\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e47\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e63\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e61\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"104.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Burgundy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/db-leather__c_burgundy.jpg?v=1793740755\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eRuns large — oversized cut\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eSize down. Between sizes? Take the smaller size. The larger sizes are cut tighter - size up in XL and above.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:75.7%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Burgundy \/ S","offer_id":60632292426062,"sku":"SLT1034-001","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Burgundy \/ M","offer_id":60632292458830,"sku":"SLT1034-002","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Burgundy \/ L","offer_id":60632292491598,"sku":"SLT1034-003","price":104.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/db-leather__01_studio.jpg?v=1793740754"},{"product_id":"josephine-longline-double-breasted-tailored-coat","title":"Josephine - Longline Double-Breasted Tailored Coat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Tailored Coat That Runs To The Ankle\u003c\/h2\u003e\n\u003cp\u003eJosephine is a full-length double-breasted coat with a wide, flat notch lapel and a straight body that falls from the shoulder with no flare and no belt. On most people it finishes at or just above the ankle.\u003c\/p\u003e\n\u003cp\u003eThe shoulder is built up and the brushed fabric is smooth and fully lined. Flap pockets sit at the hip. Six colours: beige, black, brown, green, grey and pink. Dry clean, or wash cold on a gentle cycle and hang to dry.\u003c\/p\u003e\n\u003cp\u003eSized S to 3XL. The sizing table below gives the maker's garment measurements for each size.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eAU\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUK\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8-10\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4-6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8-10\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e96\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e37.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e59\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e105\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e41.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12-14\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8-10\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12-14\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e100\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e39.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e60\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e106\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e41.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e16-18\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12-14\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e16-18\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e104\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e41.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e61\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e107\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42.1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20-22\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e16-18\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20-22\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e108\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e62\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e108\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24-26\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20-22\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24-26\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e112\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e44.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e63\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e109\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e3XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e28-30\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24-26\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e28-30\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e116\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e45.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e64\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e110\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e43.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"143.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Beige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/be-lapelcoat__c_beige_studio.jpg?v=1793740755\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/be-lapelcoat__c_black_studio.jpg?v=1793740755\u0026amp;width=96\"},{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/be-lapelcoat__c_brown_studio.jpg?v=1793740755\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/be-lapelcoat__c_green_studio.jpg?v=1793740755\u0026amp;width=96\"},{\"v\":\"Grey\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/be-lapelcoat__c_grey_studio.jpg?v=1793740755\u0026amp;width=96\"},{\"v\":\"Pink\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/be-lapelcoat__01_studio.jpg?v=1793740755\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eRuns small — regular cut\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eSize up. Between sizes? Take the larger size. The larger sizes are cut tighter - size up in XL and above.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:32.4%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"slt-fit__on\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Beige \/ S","offer_id":60632294457678,"sku":"SLT1035-001","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":60632294490446,"sku":"SLT1035-002","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S","offer_id":60632294523214,"sku":"SLT1035-003","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ S","offer_id":60632294555982,"sku":"SLT1035-004","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ S","offer_id":60632294588750,"sku":"SLT1035-005","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ S","offer_id":60632294621518,"sku":"SLT1035-006","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ M","offer_id":60632294654286,"sku":"SLT1035-007","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60632294687054,"sku":"SLT1035-008","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":60632294719822,"sku":"SLT1035-009","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ M","offer_id":60632294752590,"sku":"SLT1035-010","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ M","offer_id":60632294785358,"sku":"SLT1035-011","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ M","offer_id":60632294818126,"sku":"SLT1035-012","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ L","offer_id":60632294850894,"sku":"SLT1035-013","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60632294883662,"sku":"SLT1035-014","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":60632294916430,"sku":"SLT1035-015","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ L","offer_id":60632294949198,"sku":"SLT1035-016","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ L","offer_id":60632294981966,"sku":"SLT1035-017","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ L","offer_id":60632295014734,"sku":"SLT1035-018","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ XL","offer_id":60632295047502,"sku":"SLT1035-019","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60632295080270,"sku":"SLT1035-020","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":60632295113038,"sku":"SLT1035-021","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XL","offer_id":60632295145806,"sku":"SLT1035-022","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ XL","offer_id":60632295178574,"sku":"SLT1035-023","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ XL","offer_id":60632295211342,"sku":"SLT1035-024","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 2XL","offer_id":60632295244110,"sku":"SLT1035-025","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":60632295276878,"sku":"SLT1035-026","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 2XL","offer_id":60632295309646,"sku":"SLT1035-027","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 2XL","offer_id":60632295342414,"sku":"SLT1035-028","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ 2XL","offer_id":60632295375182,"sku":"SLT1035-029","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ 2XL","offer_id":60632295407950,"sku":"SLT1035-030","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 3XL","offer_id":60632295440718,"sku":"SLT1035-031","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":60632295473486,"sku":"SLT1035-032","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 3XL","offer_id":60632295506254,"sku":"SLT1035-033","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 3XL","offer_id":60632295539022,"sku":"SLT1035-034","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ 3XL","offer_id":60632295571790,"sku":"SLT1035-035","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ 3XL","offer_id":60632295604558,"sku":"SLT1035-036","price":143.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/be-lapelcoat__c_brown_studio.jpg?v=1793740755"},{"product_id":"leonie-drawstring-utility-jacket","title":"Leonie - Drawstring Utility Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Utility Jacket That Cinches Where You Pull\u003c\/h2\u003e\n\u003cp\u003eLeonie is a single-breasted utility jacket with a stand collar, two large buttoned flap pockets on the chest, buttoned epaulettes and buttoned tabs at the cuffs. It stops at the hip.\u003c\/p\u003e\n\u003cp\u003eA drawstring runs through the waist inside the jacket, so you set the shape yourself: pulled in it blouses over the hip, left loose it hangs straight. The soft, natural-feel fabric is unlined. Machine wash cold on a gentle cycle and hang to dry.\u003c\/p\u003e\n\u003cp\u003eSized M to 2XL. The sizing table below gives the maker's garment measurements for each size.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eAU\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUK\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12-14\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8-10\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12-14\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e96\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e37.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e73\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e28.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e52\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e16-18\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12-14\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e16-18\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e100\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e39.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e74\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e53\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20-22\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e16-18\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20-22\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e104\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e40.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e75\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e54\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24-26\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20-22\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24-26\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e108\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e76\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e55\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"91.99\" data-was=\"\" data-sizes='[\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/be-utility__c_black_studio.jpg?v=1793740779\u0026amp;width=96\"},{\"v\":\"Cream\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/be-utility__c_cream_studio.jpg?v=1793740778\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/be-utility__c_green_studio.jpg?v=1793740779\u0026amp;width=96\"},{\"v\":\"Pink\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/be-utility__01_studio.jpg?v=1793740778\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eTrue to size — regular cut\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eTake your usual size. It sits close to the body, so between sizes, size up.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:32.0%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Black \/ M","offer_id":60632297177422,"sku":"SLT1036-001","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Cream \/ M","offer_id":60632297210190,"sku":"SLT1036-002","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ M","offer_id":60632297242958,"sku":"SLT1036-003","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ M","offer_id":60632297275726,"sku":"SLT1036-004","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60632297308494,"sku":"SLT1036-005","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Cream \/ L","offer_id":60632297341262,"sku":"SLT1036-006","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ L","offer_id":60632297374030,"sku":"SLT1036-007","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ L","offer_id":60632297406798,"sku":"SLT1036-008","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60632297439566,"sku":"SLT1036-009","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Cream \/ XL","offer_id":60632297472334,"sku":"SLT1036-010","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XL","offer_id":60632297505102,"sku":"SLT1036-011","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ XL","offer_id":60632297537870,"sku":"SLT1036-012","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":60632297570638,"sku":"SLT1036-013","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Cream \/ 2XL","offer_id":60632297603406,"sku":"SLT1036-014","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 2XL","offer_id":60632297636174,"sku":"SLT1036-015","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ 2XL","offer_id":60632297668942,"sku":"SLT1036-016","price":91.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/be-utility__01_studio.jpg?v=1793740778"},{"product_id":"clemence-belted-wool-look-wrap-coat","title":"Clemence - Belted Soft-Brushed Wrap Coat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Long Wrap Coat You Tie Rather Than Button\u003c\/h2\u003e\n\u003cp\u003eClemence is a long wrap coat that closes with a wide self-tie belt, with the front crossing over beneath it for a soft diagonal line. A wide notch lapel opens flat across the chest.\u003c\/p\u003e\n\u003cp\u003eThe body falls uninterrupted to mid-calf, with two flap pockets at the hip. The brushed, soft-handled fabric is fully lined. Five colours: beige, black, brown, chocolate and khaki. Dry clean, or wash cold on a gentle cycle and hang to dry.\u003c\/p\u003e\n\u003cp\u003eSized S to 2XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"117.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Beige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-longcoat__01_studio_c19d2344-81d8-4dff-8db3-4cad1421827c.jpg?v=1793740779\u0026amp;width=96\"},{\"v\":\"Chocolate\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-longcoat__c_chocolate_studio_7a0a3556-28bb-45d7-af22-797265a2935c.jpg?v=1793740779\u0026amp;width=96\"},{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-longcoat__c_brown_studio_07cc82d7-3e5c-4ff4-a76b-3b0efc38a1b4.jpg?v=1793740779\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-longcoat__c_black_studio_8f36492c-e1f7-40d8-9e92-220b60fc5d60.jpg?v=1793740779\u0026amp;width=96\"},{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-longcoat__c_khaki_studio_fa0d599e-ffe0-4cb1-a3a2-74bb1e8f779f.jpg?v=1793740779\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Beige \/ S","offer_id":60632299274574,"sku":"SLT1037-001","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ M","offer_id":60632299307342,"sku":"SLT1037-002","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ L","offer_id":60632299340110,"sku":"SLT1037-003","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ XL","offer_id":60632299372878,"sku":"SLT1037-004","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 2XL","offer_id":60632299405646,"sku":"SLT1037-005","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Chocolate \/ S","offer_id":60632299438414,"sku":"SLT1037-006","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Chocolate \/ M","offer_id":60632299471182,"sku":"SLT1037-007","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Chocolate \/ L","offer_id":60632299503950,"sku":"SLT1037-008","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Chocolate \/ XL","offer_id":60632299536718,"sku":"SLT1037-009","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Chocolate \/ 2XL","offer_id":60632299569486,"sku":"SLT1037-010","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S","offer_id":60632299602254,"sku":"SLT1037-011","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":60632299635022,"sku":"SLT1037-012","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":60632299667790,"sku":"SLT1037-013","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":60632299700558,"sku":"SLT1037-014","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 2XL","offer_id":60632299733326,"sku":"SLT1037-015","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":60632299766094,"sku":"SLT1037-016","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60632299798862,"sku":"SLT1037-017","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60632299831630,"sku":"SLT1037-018","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60632299864398,"sku":"SLT1037-019","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":60632299897166,"sku":"SLT1037-020","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ S","offer_id":60632299929934,"sku":"SLT1037-021","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ M","offer_id":60632299962702,"sku":"SLT1037-022","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ L","offer_id":60632299995470,"sku":"SLT1037-023","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XL","offer_id":60632300028238,"sku":"SLT1037-024","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 2XL","offer_id":60632300061006,"sku":"SLT1037-025","price":117.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-longcoat__01_studio_c19d2344-81d8-4dff-8db3-4cad1421827c.jpg?v=1793740779"},{"product_id":"honora-sherpa-lined-longline-puffer-coat","title":"Honora - Plush-Lined Longline Puffer Coat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Knee-Length Puffer Lined In Deep-Pile Plush\u003c\/h2\u003e\n\u003cp\u003eHonora is a longline puffer with a quilted shell in wide horizontal channels, running to below the knee. The body and the fixed hood are lined throughout in cream deep-pile plush, and a full-length zip runs from hem to hood.\u003c\/p\u003e\n\u003cp\u003eDeep pockets sit at the hip and the fill is insulating. The fit is relaxed, with room for knitwear underneath. Seven colours: black, beige, brown, burgundy, army green and more. Machine wash cold and do not tumble dry.\u003c\/p\u003e\n\u003cp\u003eSized S to 3XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"143.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-puffer__02_studio.jpg?v=1793740779\u0026amp;width=96\"},{\"v\":\"Navy Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-puffer__c_navy-blue_studio_z.jpg?v=1793740804\u0026amp;width=96\"},{\"v\":\"Grey\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-puffer__c_grey_studio_z.jpg?v=1793740804\u0026amp;width=96\"},{\"v\":\"Army Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-puffer__c_army-green_studio_z.jpg?v=1793740805\u0026amp;width=96\"},{\"v\":\"Burgundy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-puffer__c_burgundy_studio_z.jpg?v=1793740807\u0026amp;width=96\"},{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-puffer__c_brown_studio_z.jpg?v=1793740804\u0026amp;width=96\"},{\"v\":\"Beige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-puffer__c_beige_studio_z.jpg?v=1793740804\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Black \/ S","offer_id":60632301470030,"sku":"SLT1038-001","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60632301502798,"sku":"SLT1038-002","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60632301535566,"sku":"SLT1038-003","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60632301568334,"sku":"SLT1038-004","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":60632301601102,"sku":"SLT1038-005","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":60632301633870,"sku":"SLT1038-006","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ S","offer_id":60632301666638,"sku":"SLT1038-007","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ M","offer_id":60632301699406,"sku":"SLT1038-008","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ L","offer_id":60632301732174,"sku":"SLT1038-009","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ XL","offer_id":60632301764942,"sku":"SLT1038-010","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 2XL","offer_id":60632301797710,"sku":"SLT1038-011","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 3XL","offer_id":60632301830478,"sku":"SLT1038-012","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ S","offer_id":60632301863246,"sku":"SLT1038-013","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ M","offer_id":60632301896014,"sku":"SLT1038-014","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ L","offer_id":60632301928782,"sku":"SLT1038-015","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ XL","offer_id":60632301961550,"sku":"SLT1038-016","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ 2XL","offer_id":60632301994318,"sku":"SLT1038-017","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ 3XL","offer_id":60632302027086,"sku":"SLT1038-018","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ S","offer_id":60632302059854,"sku":"SLT1038-019","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ M","offer_id":60632302092622,"sku":"SLT1038-020","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ L","offer_id":60632302125390,"sku":"SLT1038-021","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ XL","offer_id":60632302158158,"sku":"SLT1038-022","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ 2XL","offer_id":60632302190926,"sku":"SLT1038-023","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ 3XL","offer_id":60632302223694,"sku":"SLT1038-024","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Burgundy \/ S","offer_id":60632302256462,"sku":"SLT1038-025","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Burgundy \/ M","offer_id":60632302289230,"sku":"SLT1038-026","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Burgundy \/ L","offer_id":60632302321998,"sku":"SLT1038-027","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Burgundy \/ XL","offer_id":60632302354766,"sku":"SLT1038-028","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Burgundy \/ 2XL","offer_id":60632302387534,"sku":"SLT1038-029","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Burgundy \/ 3XL","offer_id":60632302420302,"sku":"SLT1038-030","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S","offer_id":60632302453070,"sku":"SLT1038-031","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":60632302485838,"sku":"SLT1038-032","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":60632302518606,"sku":"SLT1038-033","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":60632302551374,"sku":"SLT1038-034","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 2XL","offer_id":60632302584142,"sku":"SLT1038-035","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 3XL","offer_id":60632302616910,"sku":"SLT1038-036","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ S","offer_id":60632302649678,"sku":"SLT1038-037","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ M","offer_id":60632302682446,"sku":"SLT1038-038","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ L","offer_id":60632302715214,"sku":"SLT1038-039","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ XL","offer_id":60632302747982,"sku":"SLT1038-040","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 2XL","offer_id":60632302780750,"sku":"SLT1038-041","price":143.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 3XL","offer_id":60632302813518,"sku":"SLT1038-042","price":143.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ll-puffer__02_studio.jpg?v=1793740779"},{"product_id":"emeline-funnel-collar-a-line-coat","title":"Emeline - Funnel-Collar A-Line Coat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Mid-Thigh Coat That Closes High At The Throat\u003c\/h2\u003e\n\u003cp\u003eEmeline is an A-line coat with no lapel. The front runs straight up into a funnel collar closed by two large covered buttons, with the rest of the placket hidden beneath.\u003c\/p\u003e\n\u003cp\u003eFrom the chest the body flares gently and stops at mid-thigh, with slash pockets at the hip. The smooth, brushed fabric is lined and plain. Four colours: camel, cream, black and grey. Dry clean, or wash cold on a gentle cycle and hang to dry.\u003c\/p\u003e\n\u003cp\u003eSized XS to 2XL. The sizing table below gives the body measurements each size fits.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eChest (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eChest (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eWaist (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eWaist (in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e92\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e36.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e73\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e28.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e96\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e37.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e74\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e100\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e39.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e75\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e106\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e41.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e76\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e112\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e44.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e77\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eThis table lists BODY measurements, not garment measurements - measure yourself and pick the size whose range you fall into. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"104.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Camel\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-alinecoat__c_camel_studio_4a8900e6-2dfe-4c6c-ab66-0bd78cc8f526.jpg?v=1793740804\u0026amp;width=96\"},{\"v\":\"Cream\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-alinecoat__01_studio_1773744e-5bd9-4fe9-ba57-1054c338fe2e.jpg?v=1793740804\u0026amp;width=96\"},{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-alinecoat__c_gray_studio_5b4a2d90-8d6c-4f13-9022-69eb8267f70b.jpg?v=1793740804\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-alinecoat__c_black_studio_bd8b2be0-7a9f-4617-96c3-79ca31fbbd80.jpg?v=1793740804\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eRuns large\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eSize down. Between sizes? Take the smaller size. The larger sizes are cut tighter - size up in XL and above.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:69.1%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Camel \/ XS","offer_id":60632305303886,"sku":"SLT1039-001","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ S","offer_id":60632305336654,"sku":"SLT1039-002","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ M","offer_id":60632305369422,"sku":"SLT1039-003","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ L","offer_id":60632305402190,"sku":"SLT1039-004","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ XL","offer_id":60632305434958,"sku":"SLT1039-005","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ 2XL","offer_id":60632305467726,"sku":"SLT1039-006","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Cream \/ XS","offer_id":60632305500494,"sku":"SLT1039-007","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Cream \/ S","offer_id":60632305533262,"sku":"SLT1039-008","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Cream \/ M","offer_id":60632305566030,"sku":"SLT1039-009","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Cream \/ L","offer_id":60632305598798,"sku":"SLT1039-010","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Cream \/ XL","offer_id":60632305631566,"sku":"SLT1039-011","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Cream \/ 2XL","offer_id":60632305664334,"sku":"SLT1039-012","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XS","offer_id":60632305697102,"sku":"SLT1039-013","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ S","offer_id":60632305729870,"sku":"SLT1039-014","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ M","offer_id":60632305762638,"sku":"SLT1039-015","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ L","offer_id":60632305795406,"sku":"SLT1039-016","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XL","offer_id":60632305828174,"sku":"SLT1039-017","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 2XL","offer_id":60632305860942,"sku":"SLT1039-018","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XS","offer_id":60632305893710,"sku":"SLT1039-019","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":60632305926478,"sku":"SLT1039-020","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60632305959246,"sku":"SLT1039-021","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60632305992014,"sku":"SLT1039-022","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60632306024782,"sku":"SLT1039-023","price":104.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":60632306057550,"sku":"SLT1039-024","price":104.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-alinecoat__01_studio_1773744e-5bd9-4fe9-ba57-1054c338fe2e.jpg?v=1793740804"},{"product_id":"rosanne-knit-sleeve-hybrid-denim-jacket","title":"Rosanne - Knit-Sleeve Hybrid Woven Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Woven Jacket With Knitted Sleeves And Sides\u003c\/h2\u003e\n\u003cp\u003eRosanne is a hip-length jacket that keeps the front of a classic trucker, with its collar, button placket and chest seams in sturdy woven fabric, and swaps the sleeves and side panels for a chunky ribbed knit.\u003c\/p\u003e\n\u003cp\u003eSturdy woven cuffs turn back over the knit at the wrist. The fit is relaxed with give through the sleeve, in a clean medium-blue wash. Six colours: cream, black, khaki, navy, red and a mixed patchwork. Machine wash cold, separately.\u003c\/p\u003e\n\u003cp\u003eSized S to 3XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"97.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"White\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-denim__01_studio.jpg?v=1793740804\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-denim__c_black_studio.jpg?v=1793740805\u0026amp;width=96\"},{\"v\":\"Multicolor\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-denim__c_multicolor_studio.jpg?v=1793740804\u0026amp;width=96\"},{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-denim__c_red_studio.jpg?v=1793740804\u0026amp;width=96\"},{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-denim__c_khaki_studio.jpg?v=1793740804\u0026amp;width=96\"},{\"v\":\"Navy Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-denim__c_navy-blue_studio.jpg?v=1793740829\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"White \/ S","offer_id":60632307499342,"sku":"SLT1040-001","price":97.99,"currency_code":"USD","in_stock":true},{"title":"White \/ M","offer_id":60632307532110,"sku":"SLT1040-002","price":97.99,"currency_code":"USD","in_stock":true},{"title":"White \/ L","offer_id":60632307564878,"sku":"SLT1040-003","price":97.99,"currency_code":"USD","in_stock":true},{"title":"White \/ XL","offer_id":60632307597646,"sku":"SLT1040-004","price":97.99,"currency_code":"USD","in_stock":true},{"title":"White \/ 2XL","offer_id":60632307630414,"sku":"SLT1040-005","price":97.99,"currency_code":"USD","in_stock":true},{"title":"White \/ 3XL","offer_id":60632307663182,"sku":"SLT1040-006","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":60632307695950,"sku":"SLT1040-007","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60632307728718,"sku":"SLT1040-008","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60632307761486,"sku":"SLT1040-009","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60632307794254,"sku":"SLT1040-010","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":60632307827022,"sku":"SLT1040-011","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":60632307859790,"sku":"SLT1040-012","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Multicolor \/ S","offer_id":60632307892558,"sku":"SLT1040-013","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Multicolor \/ M","offer_id":60632307925326,"sku":"SLT1040-014","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Multicolor \/ L","offer_id":60632307958094,"sku":"SLT1040-015","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Multicolor \/ XL","offer_id":60632307990862,"sku":"SLT1040-016","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Multicolor \/ 2XL","offer_id":60632308023630,"sku":"SLT1040-017","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Multicolor \/ 3XL","offer_id":60632308056398,"sku":"SLT1040-018","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ S","offer_id":60632308089166,"sku":"SLT1040-019","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ M","offer_id":60632308121934,"sku":"SLT1040-020","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ L","offer_id":60632308154702,"sku":"SLT1040-021","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XL","offer_id":60632308187470,"sku":"SLT1040-022","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 2XL","offer_id":60632308220238,"sku":"SLT1040-023","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 3XL","offer_id":60632308253006,"sku":"SLT1040-024","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ S","offer_id":60632308285774,"sku":"SLT1040-025","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ M","offer_id":60632308318542,"sku":"SLT1040-026","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ L","offer_id":60632308351310,"sku":"SLT1040-027","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XL","offer_id":60632308384078,"sku":"SLT1040-028","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 2XL","offer_id":60632308416846,"sku":"SLT1040-029","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 3XL","offer_id":60632308449614,"sku":"SLT1040-030","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ S","offer_id":60632308482382,"sku":"SLT1040-031","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ M","offer_id":60632308515150,"sku":"SLT1040-032","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ L","offer_id":60632308547918,"sku":"SLT1040-033","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ XL","offer_id":60632308580686,"sku":"SLT1040-034","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 2XL","offer_id":60632308613454,"sku":"SLT1040-035","price":97.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 3XL","offer_id":60632308646222,"sku":"SLT1040-036","price":97.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cs-denim__01_studio.jpg?v=1793740804"},{"product_id":"philippa-oversized-short-puffer-jacket","title":"Philippa - Oversized Short Puffer Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Short Puffer Cut Deliberately Oversized\u003c\/h2\u003e\n\u003cp\u003ePhilippa is a hip-length puffer with the volume turned up: a dropped shoulder, a wide body and full sleeves gathered into elasticated cuffs. A tall stand collar zips to the chin, and there is no hood.\u003c\/p\u003e\n\u003cp\u003eOne clean full-length zip closes the front, with no press studs over it. The matte quilted shell has a lightweight insulating fill. Four colours: khaki, black, green and white. Machine wash cold and do not tumble dry.\u003c\/p\u003e\n\u003cp\u003eSized XS to 2XL. The sizing table below gives the maker's garment measurements for each size.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e56\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e112\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e44.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e60\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e50\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e19.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e56\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e112\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e44.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e60\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e50\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e19.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e58\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e116\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e45.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e61.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e52\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e60\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e120\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e47.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e63\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e54\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e62\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e124\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e48.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e64.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e56\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e62\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e124\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e48.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e64.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e56\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment and given in centimetres, with the inch equivalent alongside. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"110.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dt-puffer__01_studio.jpg?v=1793740829\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dt-puffer__c_black_studio.jpg?v=1793740830\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dt-puffer__c_green_studio.jpg?v=1793740829\u0026amp;width=96\"},{\"v\":\"White\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dt-puffer__c_white_studio.jpg?v=1793740829\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eTrue to size — oversized cut\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eTake your usual size. Between sizes? Size down for a closer fit. The larger sizes are cut tighter - size up in XL and above.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:56.6%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Khaki \/ XS","offer_id":60632310546766,"sku":"SLT1041-001","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ S","offer_id":60632310579534,"sku":"SLT1041-002","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ M","offer_id":60632310612302,"sku":"SLT1041-003","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ L","offer_id":60632310645070,"sku":"SLT1041-004","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XL","offer_id":60632310677838,"sku":"SLT1041-005","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 2XL","offer_id":60632310710606,"sku":"SLT1041-006","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XS","offer_id":60632310743374,"sku":"SLT1041-007","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":60632310776142,"sku":"SLT1041-008","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60632310808910,"sku":"SLT1041-009","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60632310841678,"sku":"SLT1041-010","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60632310874446,"sku":"SLT1041-011","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":60632310907214,"sku":"SLT1041-012","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XS","offer_id":60632310939982,"sku":"SLT1041-013","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ S","offer_id":60632310972750,"sku":"SLT1041-014","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ M","offer_id":60632311005518,"sku":"SLT1041-015","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ L","offer_id":60632311038286,"sku":"SLT1041-016","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XL","offer_id":60632311071054,"sku":"SLT1041-017","price":110.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 2XL","offer_id":60632311103822,"sku":"SLT1041-018","price":110.99,"currency_code":"USD","in_stock":true},{"title":"White \/ XS","offer_id":60632311136590,"sku":"SLT1041-019","price":110.99,"currency_code":"USD","in_stock":true},{"title":"White \/ S","offer_id":60632311169358,"sku":"SLT1041-020","price":110.99,"currency_code":"USD","in_stock":true},{"title":"White \/ M","offer_id":60632311202126,"sku":"SLT1041-021","price":110.99,"currency_code":"USD","in_stock":true},{"title":"White \/ L","offer_id":60632311234894,"sku":"SLT1041-022","price":110.99,"currency_code":"USD","in_stock":true},{"title":"White \/ XL","offer_id":60632311267662,"sku":"SLT1041-023","price":110.99,"currency_code":"USD","in_stock":true},{"title":"White \/ 2XL","offer_id":60632311300430,"sku":"SLT1041-024","price":110.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/dt-puffer__01_studio.jpg?v=1793740829"},{"product_id":"ravenscar-shearling-leather-flight-jacket","title":"Ravenscar - Shearling Flight Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Plush-Lined Flight Jacket for Cold Days\u003c\/h2\u003e\n\u003cp\u003eRavenscar is a short flight jacket in a smooth polished material, lined throughout in deep-pile plush with a matching collar and cuffs. The collar closes with a throat strap and stays fastened.\u003c\/p\u003e\n\u003cp\u003eThe cut is classic, with a hip-length body and a ribbed hem, and the closure is reinforced to hold shut in wind. Lined pockets are deep enough to use. The fit is regular. Hand wash cold and dry flat.\u003c\/p\u003e\n\u003cp\u003eSized M to 3XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"169.99\" data-was=\"\" data-sizes='[\"M\",\"L\",\"XL\",\"2XL\",\"3XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ravenscar-shearling-leather-flight-jacket__s01_brown.jpg?v=1793740857\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Brown \/ M","offer_id":60665663816014,"sku":"SLT1084-001","price":169.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":60665663848782,"sku":"SLT1084-002","price":169.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":60665663881550,"sku":"SLT1084-003","price":169.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 2XL","offer_id":60665663914318,"sku":"SLT1084-004","price":169.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 3XL","offer_id":60665663947086,"sku":"SLT1084-005","price":169.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ravenscar-shearling-leather-flight-jacket__s01_brown.jpg?v=1793740857"},{"product_id":"ariane-oversized-hooded-puffer-coat","title":"Ariane - Oversized Hooded Puffer Coat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eAn Oversized Hooded Puffer for Deep Winter\u003c\/h2\u003e\n\u003cp\u003eAriane is a longline puffer with a deliberately oversized body that layers over knitwear without compressing it, and a deep fixed hood that gives real coverage.\u003c\/p\u003e\n\u003cp\u003eThe shell is matte woven, so the volume reads as design rather than a duvet, and the lightweight insulated fill keeps it warm without weight. The line covers the hip and lower back. Hand wash cold and dry flat.\u003c\/p\u003e\n\u003cp\u003eSized S to XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"78.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ariane-oversized-hooded-puffer-coat__s01_black_z.jpg?v=1793740858\u0026amp;width=96\"},{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ariane-oversized-hooded-puffer-coat__s02_brown_z.jpg?v=1793740858\u0026amp;width=96\"},{\"v\":\"Beige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ariane-oversized-hooded-puffer-coat__s03_beige_z.jpg?v=1793740857\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Black \/ S","offer_id":60665685082446,"sku":"SLT1085-001","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60665685115214,"sku":"SLT1085-002","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60665685147982,"sku":"SLT1085-003","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60665685180750,"sku":"SLT1085-004","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S","offer_id":60665685213518,"sku":"SLT1085-005","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":60665685246286,"sku":"SLT1085-006","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":60665685279054,"sku":"SLT1085-007","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":60665685311822,"sku":"SLT1085-008","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ S","offer_id":60665685344590,"sku":"SLT1085-009","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ M","offer_id":60665685377358,"sku":"SLT1085-010","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ L","offer_id":60665685410126,"sku":"SLT1085-011","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ XL","offer_id":60665685442894,"sku":"SLT1085-012","price":78.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ariane-oversized-hooded-puffer-coat__s01_black_z.jpg?v=1793740858"},{"product_id":"brielle-short-hooded-padded-jacket","title":"Brielle - Short Hooded Padded Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Short Padded Jacket with a Wide Hood\u003c\/h2\u003e\n\u003cp\u003eBrielle is a padded jacket cropped at the hip, so it works over a dress or with high-waisted trousers. It has a wide fixed hood that stays up in wind and a thick fill that keeps it as warm as a longer coat.\u003c\/p\u003e\n\u003cp\u003eThe shell is matte woven, the front is clean with minimal hardware and the fit is regular with room to layer. Three colours: black, grey and burgundy. Machine wash cold and hang to dry.\u003c\/p\u003e\n\u003cp\u003eSized XS to L.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"78.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Burgundy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/brielle-short-hooded-padded-jacket__s01_burgundy.jpg?v=1793740857\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/brielle-short-hooded-padded-jacket__s02_black.jpg?v=1793740857\u0026amp;width=96\"},{\"v\":\"Grey\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/brielle-short-hooded-padded-jacket__s03_grey.jpg?v=1793740858\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Burgundy \/ XS","offer_id":60665693897038,"sku":"SLT1086-001","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Burgundy \/ S","offer_id":60665693929806,"sku":"SLT1086-002","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Burgundy \/ M","offer_id":60665693962574,"sku":"SLT1086-003","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Burgundy \/ L","offer_id":60665693995342,"sku":"SLT1086-004","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XS","offer_id":60665694028110,"sku":"SLT1086-005","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":60665694060878,"sku":"SLT1086-006","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60665694093646,"sku":"SLT1086-007","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60665694126414,"sku":"SLT1086-008","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ XS","offer_id":60665694159182,"sku":"SLT1086-009","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ S","offer_id":60665694191950,"sku":"SLT1086-010","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ M","offer_id":60665694224718,"sku":"SLT1086-011","price":78.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ L","offer_id":60665694257486,"sku":"SLT1086-012","price":78.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/brielle-short-hooded-padded-jacket__s01_burgundy.jpg?v=1793740857"},{"product_id":"florine-tailored-long-line-jacket","title":"Florine - Tailored Long Line Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Tailored Long-Line Jacket Over Dresses\u003c\/h2\u003e\n\u003cp\u003eFlorine is a long fitted jacket with straight shoulders, a defined waist and a structured front that holds its shape through the day. The length covers a dress or a longer skirt.\u003c\/p\u003e\n\u003cp\u003eIt is fully lined, with a front fastening, and warm enough for autumn to count as a real layer. The tailored cut makes an outfit look finished. Hand wash cold, reshape while damp and hang to dry.\u003c\/p\u003e\n\u003cp\u003eSized M to 3XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"91.99\" data-was=\"\" data-sizes='[\"M\",\"L\",\"XL\",\"2XL\",\"3XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/florine-tailored-long-line-jacket__s01_red.jpg?v=1793740858\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/florine-tailored-long-line-jacket__s02_black.jpg?v=1793740858\u0026amp;width=96\"},{\"v\":\"Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/florine-tailored-long-line-jacket__s03_blue.jpg?v=1793740858\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Red \/ M","offer_id":60665854886222,"sku":"SLT1087-001","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ L","offer_id":60665854918990,"sku":"SLT1087-002","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XL","offer_id":60665854951758,"sku":"SLT1087-003","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 2XL","offer_id":60665854984526,"sku":"SLT1087-004","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 3XL","offer_id":60665855017294,"sku":"SLT1087-005","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60665711329614,"sku":"SLT1087-006","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60665711362382,"sku":"SLT1087-007","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":60665711395150,"sku":"SLT1087-008","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":60665711427918,"sku":"SLT1087-009","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":60665711460686,"sku":"SLT1087-010","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ M","offer_id":60665855050062,"sku":"SLT1087-011","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ L","offer_id":60665855082830,"sku":"SLT1087-012","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XL","offer_id":60665855115598,"sku":"SLT1087-013","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 2XL","offer_id":60665855148366,"sku":"SLT1087-014","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 3XL","offer_id":60665855181134,"sku":"SLT1087-015","price":91.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/florine-tailored-long-line-jacket__s01_red.jpg?v=1793740858"},{"product_id":"capucine-double-breasted-wool-blend-coat","title":"Capucine - Double-Breasted Soft-Blend Coat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Warm Double-Breasted Coat for Cold Days\u003c\/h2\u003e\n\u003cp\u003eCapucine is a short double-breasted coat with a flat turned-down collar and a loose, modern cut. The front closes properly and blocks the wind at the overlap.\u003c\/p\u003e\n\u003cp\u003eThe soft, breathable blend is reinforced in thickness for real warmth, and the cut layers over a knit without pulling. Four colours: beige, black, navy and brown. Hand wash cold and dry flat.\u003c\/p\u003e\n\u003cp\u003eSized XS to L. The sizing table below gives the body measurements each size fits.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eTaille\u003c\/th\u003e\n\u003cth\u003ePoitrine (in)\u003c\/th\u003e\n\u003cth\u003eManche (in)\u003c\/th\u003e\n\u003cth\u003eLongueur (in)\u003c\/th\u003e\n\u003cth\u003eÉpaule (in)\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eXS\u003c\/td\u003e\n\u003ctd\u003e42.5\u003c\/td\u003e\n\u003ctd\u003e19.5\u003c\/td\u003e\n\u003ctd\u003e24.0\u003c\/td\u003e\n\u003ctd\u003e22.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eS\u003c\/td\u003e\n\u003ctd\u003e44.5\u003c\/td\u003e\n\u003ctd\u003e20.0\u003c\/td\u003e\n\u003ctd\u003e24.5\u003c\/td\u003e\n\u003ctd\u003e23.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eM\u003c\/td\u003e\n\u003ctd\u003e46.5\u003c\/td\u003e\n\u003ctd\u003e20.5\u003c\/td\u003e\n\u003ctd\u003e24.5\u003c\/td\u003e\n\u003ctd\u003e23.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eL\u003c\/td\u003e\n\u003ctd\u003e48.5\u003c\/td\u003e\n\u003ctd\u003e21.0\u003c\/td\u003e\n\u003ctd\u003e25.0\u003c\/td\u003e\n\u003ctd\u003e23.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eThis table lists BODY measurements, not garment measurements - measure yourself and pick the size whose range you fall into. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"75.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Beige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/capucine-double-breasted-wool-blend-coat__s01_beige.jpg?v=1793740907\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/capucine-double-breasted-wool-blend-coat__s02_black.jpg?v=1793740907\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/capucine-double-breasted-wool-blend-coat__s03_green.jpg?v=1793740906\u0026amp;width=96\"},{\"v\":\"Navy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/capucine-double-breasted-wool-blend-coat__s04_navy.jpg?v=1793740907\u0026amp;width=96\"},{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/capucine-double-breasted-wool-blend-coat__s05_brown.jpg?v=1793740906\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Beige \/ XS","offer_id":60665721946446,"sku":"SLT1093-001","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ S","offer_id":60665721979214,"sku":"SLT1093-002","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ M","offer_id":60665722011982,"sku":"SLT1093-003","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ L","offer_id":60665722044750,"sku":"SLT1093-004","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XS","offer_id":60665722077518,"sku":"SLT1093-005","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":60665722110286,"sku":"SLT1093-006","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":60665722143054,"sku":"SLT1093-007","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":60665722175822,"sku":"SLT1093-008","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XS","offer_id":60665859473742,"sku":"SLT1093-009","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ S","offer_id":60665859506510,"sku":"SLT1093-010","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ M","offer_id":60665859539278,"sku":"SLT1093-011","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ L","offer_id":60665859572046,"sku":"SLT1093-012","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ XS","offer_id":60665722208590,"sku":"SLT1093-013","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ S","offer_id":60665722241358,"sku":"SLT1093-014","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ M","offer_id":60665722274126,"sku":"SLT1093-015","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ L","offer_id":60665722306894,"sku":"SLT1093-016","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XS","offer_id":60665722339662,"sku":"SLT1093-017","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S","offer_id":60665722372430,"sku":"SLT1093-018","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":60665722405198,"sku":"SLT1093-019","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":60665722437966,"sku":"SLT1093-020","price":75.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/capucine-double-breasted-wool-blend-coat__s01_beige.jpg?v=1793740907"},{"product_id":"brampton-hooded-winter-puffer-jacket","title":"Brampton - Hooded Winter Puffer Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Hooded Winter Puffer Made for Cold Months\u003c\/h2\u003e\n\u003cp\u003eBrampton is a hooded winter puffer with a full winter fill, a fixed hood that stays up and a zip front with a covered placket that keeps the wind out.\u003c\/p\u003e\n\u003cp\u003eThe regular cut leaves room for a knit underneath without pulling across the back, and the shell is a matte woven fabric. It is finished in three shades and does not come in black. Hand wash cold and dry flat.\u003c\/p\u003e\n\u003cp\u003eSized M to 4XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"84.99\" data-was=\"\" data-sizes='[\"M\",\"L\",\"XL\",\"2XL\",\"3XL\",\"4XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Light Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/brampton-hooded-winter-puffer-jacket__s01_light-blue.jpg?v=1793740908\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/brampton-hooded-winter-puffer-jacket__s02_green.jpg?v=1793740907\u0026amp;width=96\"},{\"v\":\"Light Pink\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/brampton-hooded-winter-puffer-jacket__s03_light-pink.jpg?v=1793740907\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Light Blue \/ M","offer_id":60665863864654,"sku":"SLT1094-001","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Light Blue \/ L","offer_id":60665863897422,"sku":"SLT1094-002","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Light Blue \/ XL","offer_id":60665863930190,"sku":"SLT1094-003","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Light Blue \/ 2XL","offer_id":60665863962958,"sku":"SLT1094-004","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Light Blue \/ 3XL","offer_id":60665863995726,"sku":"SLT1094-005","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Light Blue \/ 4XL","offer_id":60665864028494,"sku":"SLT1094-006","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ M","offer_id":60665864061262,"sku":"SLT1094-007","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ L","offer_id":60665864094030,"sku":"SLT1094-008","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XL","offer_id":60665864126798,"sku":"SLT1094-009","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 2XL","offer_id":60665864159566,"sku":"SLT1094-010","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 3XL","offer_id":60665864192334,"sku":"SLT1094-011","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 4XL","offer_id":60665864225102,"sku":"SLT1094-012","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Light Pink \/ M","offer_id":60665864257870,"sku":"SLT1094-013","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Light Pink \/ L","offer_id":60665864290638,"sku":"SLT1094-014","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Light Pink \/ XL","offer_id":60665864323406,"sku":"SLT1094-015","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Light Pink \/ 2XL","offer_id":60665864356174,"sku":"SLT1094-016","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Light Pink \/ 3XL","offer_id":60665864388942,"sku":"SLT1094-017","price":84.99,"currency_code":"USD","in_stock":true},{"title":"Light Pink \/ 4XL","offer_id":60665864421710,"sku":"SLT1094-018","price":84.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/brampton-hooded-winter-puffer-jacket__s01_light-blue.jpg?v=1793740908"},{"product_id":"mowbray-quilted-hooded-puffer-jacket","title":"Mowbray - Quilted Hooded Puffer Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Quilted Hooded Puffer for Cold Days\u003c\/h2\u003e\n\u003cp\u003eMowbray is a quilted puffer with a full quilted fill, a fixed lined hood and a two-way zip that opens from the hem when you sit down.\u003c\/p\u003e\n\u003cp\u003eThere is enough fill to make a coat unnecessary over it. The quilted woven shell is cut regular, so a jumper goes underneath without a fight. Hand wash cold and dry flat.\u003c\/p\u003e\n\u003cp\u003eSized US 34 to US 46-48.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"88.99\" data-was=\"\" data-sizes='[\"XS(US 34)\",\"S(US 36)\",\"M(US 38)\",\"L(US 40)\",\"XL(US 42)\",\"XXL(US 44)\",\"XXXL(US 46-48)\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mowbray-quilted-hooded-puffer-jacket__s01_green.jpg?v=1793740930\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mowbray-quilted-hooded-puffer-jacket__s02_black.jpg?v=1793740930\u0026amp;width=96\"},{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mowbray-quilted-hooded-puffer-jacket__s03_brown.jpg?v=1793740930\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Green \/ XS(US 34)","offer_id":60667091386702,"sku":"SLT1098-001","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ S(US 36)","offer_id":60667091419470,"sku":"SLT1098-002","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ M(US 38)","offer_id":60667091452238,"sku":"SLT1098-003","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ L(US 40)","offer_id":60667091485006,"sku":"SLT1098-004","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XL(US 42)","offer_id":60667091517774,"sku":"SLT1098-005","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XXL(US 44)","offer_id":60667091550542,"sku":"SLT1098-006","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XXXL(US 46-48)","offer_id":60667091583310,"sku":"SLT1098-007","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XS(US 34)","offer_id":60667091616078,"sku":"SLT1098-008","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S(US 36)","offer_id":60667091648846,"sku":"SLT1098-009","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M(US 38)","offer_id":60667091681614,"sku":"SLT1098-010","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L(US 40)","offer_id":60667091714382,"sku":"SLT1098-011","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL(US 42)","offer_id":60667091747150,"sku":"SLT1098-012","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XXL(US 44)","offer_id":60667091779918,"sku":"SLT1098-013","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XXXL(US 46-48)","offer_id":60667091812686,"sku":"SLT1098-014","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XS(US 34)","offer_id":60667091845454,"sku":"SLT1098-015","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S(US 36)","offer_id":60667091878222,"sku":"SLT1098-016","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M(US 38)","offer_id":60667091910990,"sku":"SLT1098-017","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L(US 40)","offer_id":60667091943758,"sku":"SLT1098-018","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL(US 42)","offer_id":60667091976526,"sku":"SLT1098-019","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XXL(US 44)","offer_id":60667092009294,"sku":"SLT1098-020","price":88.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XXXL(US 46-48)","offer_id":60667092042062,"sku":"SLT1098-021","price":88.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mowbray-quilted-hooded-puffer-jacket__s01_green.jpg?v=1793740930"},{"product_id":"fenwick-vintage-layered-collar-jacket","title":"Fenwick - Vintage Layered-Collar Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Heritage Jacket That Looks Better Every Year\u003c\/h2\u003e\n\u003cp\u003eFenwick is a long, button-front jacket with a soft brushed finish and a worn-in, vintage look. The collar is layered: a raised outer collar over a contrast brown inner placket with a zip, lined in a warm, fluffy trim around the neck.\u003c\/p\u003e\n\u003cp\u003eThree buttons close the front, two angled zip pockets with contrast trim sit at the hips, and panel seams shape the body without making it stiff. The length covers the hips, so it works over a shirt and chinos or with cargo trousers and boots. Six colours, from espresso and tan to navy and black. Dry clean or spot clean.\u003c\/p\u003e\n\u003cp\u003eSized S to 5XL. The sizing table below gives the maker's garment measurements for each size.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eSize\u003c\/th\u003e\n\u003cth\u003eChest (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eShoulder (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eSleeve (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eLength (cm \/ in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eS\u003c\/td\u003e\n\u003ctd\u003e112 \/ 44.1\u003c\/td\u003e\n\u003ctd\u003e47 \/ 18.5\u003c\/td\u003e\n\u003ctd\u003e63 \/ 24.8\u003c\/td\u003e\n\u003ctd\u003e72.5 \/ 28.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eM\u003c\/td\u003e\n\u003ctd\u003e117 \/ 46.1\u003c\/td\u003e\n\u003ctd\u003e48.5 \/ 19.1\u003c\/td\u003e\n\u003ctd\u003e64 \/ 25.2\u003c\/td\u003e\n\u003ctd\u003e74 \/ 29.1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eL\u003c\/td\u003e\n\u003ctd\u003e122 \/ 48.0\u003c\/td\u003e\n\u003ctd\u003e50 \/ 19.7\u003c\/td\u003e\n\u003ctd\u003e65 \/ 25.6\u003c\/td\u003e\n\u003ctd\u003e75.5 \/ 29.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eXL\u003c\/td\u003e\n\u003ctd\u003e127 \/ 50.0\u003c\/td\u003e\n\u003ctd\u003e51.5 \/ 20.3\u003c\/td\u003e\n\u003ctd\u003e66 \/ 26.0\u003c\/td\u003e\n\u003ctd\u003e77 \/ 30.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2XL\u003c\/td\u003e\n\u003ctd\u003e132 \/ 52.0\u003c\/td\u003e\n\u003ctd\u003e53 \/ 20.9\u003c\/td\u003e\n\u003ctd\u003e67 \/ 26.4\u003c\/td\u003e\n\u003ctd\u003e78.5 \/ 30.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3XL\u003c\/td\u003e\n\u003ctd\u003e137 \/ 53.9\u003c\/td\u003e\n\u003ctd\u003e54.5 \/ 21.5\u003c\/td\u003e\n\u003ctd\u003e68 \/ 26.8\u003c\/td\u003e\n\u003ctd\u003e80 \/ 31.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e4XL\u003c\/td\u003e\n\u003ctd\u003e142 \/ 55.9\u003c\/td\u003e\n\u003ctd\u003e56 \/ 22.0\u003c\/td\u003e\n\u003ctd\u003e69 \/ 27.2\u003c\/td\u003e\n\u003ctd\u003e81.5 \/ 32.1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5XL\u003c\/td\u003e\n\u003ctd\u003e150 \/ 59.1\u003c\/td\u003e\n\u003ctd\u003e57 \/ 22.4\u003c\/td\u003e\n\u003ctd\u003e70 \/ 27.6\u003c\/td\u003e\n\u003ctd\u003e83 \/ 32.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"87.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\",\"4XL\",\"5XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Espresso\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/alistair-mens-vintage-button-front-jacket-with-layered-collar_f1_studio.jpg?v=1793709221\u0026amp;width=96\"},{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/alistair-mens-vintage-button-front-jacket-with-layered-collar_c_khaki_studio.jpg?v=1793709221\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/alistair-mens-vintage-button-front-jacket-with-layered-collar_c_green_studio.jpg?v=1793709221\u0026amp;width=96\"},{\"v\":\"Tan\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/alistair-mens-vintage-button-front-jacket-with-layered-collar_c_tan_studio.jpg?v=1793709221\u0026amp;width=96\"},{\"v\":\"Navy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/alistair-mens-vintage-button-front-jacket-with-layered-collar_c_navy_studio.jpg?v=1793709221\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/alistair-mens-vintage-button-front-jacket-with-layered-collar_c_black_studio.jpg?v=1793709220\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eTrue to size — regular cut\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eTake your usual size. Between sizes? Size up. The larger sizes are cut tighter - size up in XL and above.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:47.8%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Espresso \/ S","offer_id":61520921166158,"sku":"SLT1101-001","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Espresso \/ M","offer_id":61520921198926,"sku":"SLT1101-002","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Espresso \/ L","offer_id":61520921231694,"sku":"SLT1101-003","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Espresso \/ XL","offer_id":61520921264462,"sku":"SLT1101-004","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Espresso \/ 2XL","offer_id":61520921297230,"sku":"SLT1101-005","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Espresso \/ 3XL","offer_id":61520921329998,"sku":"SLT1101-006","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Espresso \/ 4XL","offer_id":61520921362766,"sku":"SLT1101-007","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Espresso \/ 5XL","offer_id":61520921395534,"sku":"SLT1101-008","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ S","offer_id":61520921428302,"sku":"SLT1101-009","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ M","offer_id":61520921461070,"sku":"SLT1101-010","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ L","offer_id":61520921493838,"sku":"SLT1101-011","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XL","offer_id":61520921526606,"sku":"SLT1101-012","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 2XL","offer_id":61520921559374,"sku":"SLT1101-013","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 3XL","offer_id":61520921592142,"sku":"SLT1101-014","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 4XL","offer_id":61520921624910,"sku":"SLT1101-015","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 5XL","offer_id":61520921657678,"sku":"SLT1101-016","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ S","offer_id":61520921690446,"sku":"SLT1101-017","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ M","offer_id":61520921723214,"sku":"SLT1101-018","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ L","offer_id":61520921755982,"sku":"SLT1101-019","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XL","offer_id":61520921788750,"sku":"SLT1101-020","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 2XL","offer_id":61520921821518,"sku":"SLT1101-021","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 3XL","offer_id":61520921854286,"sku":"SLT1101-022","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 4XL","offer_id":61520921887054,"sku":"SLT1101-023","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 5XL","offer_id":61520921919822,"sku":"SLT1101-024","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Tan \/ S","offer_id":61520921952590,"sku":"SLT1101-025","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Tan \/ M","offer_id":61520921985358,"sku":"SLT1101-026","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Tan \/ L","offer_id":61520922018126,"sku":"SLT1101-027","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Tan \/ XL","offer_id":61520922050894,"sku":"SLT1101-028","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Tan \/ 2XL","offer_id":61520922083662,"sku":"SLT1101-029","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Tan \/ 3XL","offer_id":61520922116430,"sku":"SLT1101-030","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Tan \/ 4XL","offer_id":61520922149198,"sku":"SLT1101-031","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Tan \/ 5XL","offer_id":61520922181966,"sku":"SLT1101-032","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ S","offer_id":61520922214734,"sku":"SLT1101-033","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ M","offer_id":61520922247502,"sku":"SLT1101-034","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ L","offer_id":61520922280270,"sku":"SLT1101-035","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ XL","offer_id":61520922313038,"sku":"SLT1101-036","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ 2XL","offer_id":61520922345806,"sku":"SLT1101-037","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ 3XL","offer_id":61520922378574,"sku":"SLT1101-038","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ 4XL","offer_id":61520922411342,"sku":"SLT1101-039","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ 5XL","offer_id":61520922444110,"sku":"SLT1101-040","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61520922476878,"sku":"SLT1101-041","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61520922509646,"sku":"SLT1101-042","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61520922542414,"sku":"SLT1101-043","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61520922575182,"sku":"SLT1101-044","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":61520922607950,"sku":"SLT1101-045","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":61520922640718,"sku":"SLT1101-046","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 4XL","offer_id":61520922673486,"sku":"SLT1101-047","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 5XL","offer_id":61520922706254,"sku":"SLT1101-048","price":87.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/alistair-mens-vintage-button-front-jacket-with-layered-collar_f1_studio.jpg?v=1793709221"},{"product_id":"aldous-padded-boxy-work-jacket","title":"Aldous - Padded Boxy Work Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Work Jacket With Comfort and Style\u003c\/h2\u003e\n\u003cp\u003eAldous is a boxy, regular-fit work jacket with padded insulation for warmth and a soft breathable build. A collar in a soft textured finish sits above contrast trim on the hem and cuffs, giving it a sporty workwear look.\u003c\/p\u003e\n\u003cp\u003eA full-length zip closes the front from hem to collar, and the cut stays regular and boxy rather than fitted. Three colours: khaki, grey and green. Machine washable.\u003c\/p\u003e\n\u003cp\u003eSized XS to 2XL. The sizing table below gives the maker's garment measurements for each size.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable\u003e\n          \u003cthead\u003e\n            \u003ctr\u003e\n              \u003cth\u003eSize\u003c\/th\u003e\n              \u003cth\u003eBody Length (in)\u003c\/th\u003e\n              \u003cth\u003eChest (in)\u003c\/th\u003e\n              \u003cth\u003eShoulder Width (in)\u003c\/th\u003e\n              \u003cth\u003eSleeve Length (in)\u003c\/th\u003e\n              \u003cth\u003eHem Circumference (in)\u003c\/th\u003e\n            \u003c\/tr\u003e\n          \u003c\/thead\u003e\n          \u003ctbody\u003e\n            \u003ctr\u003e\n\u003ctd\u003eL\u003c\/td\u003e\n\u003ctd\u003e26.77\u003c\/td\u003e\n\u003ctd\u003e48.82\u003c\/td\u003e\n\u003ctd\u003e20.08\u003c\/td\u003e\n\u003ctd\u003e23.62\u003c\/td\u003e\n\u003ctd\u003e38.39\u003c\/td\u003e\n\u003c\/tr\u003e\n            \u003ctr\u003e\n\u003ctd\u003eXL\u003c\/td\u003e\n\u003ctd\u003e27.56\u003c\/td\u003e\n\u003ctd\u003e50.39\u003c\/td\u003e\n\u003ctd\u003e20.87\u003c\/td\u003e\n\u003ctd\u003e24.02\u003c\/td\u003e\n\u003ctd\u003e39.76\u003c\/td\u003e\n\u003c\/tr\u003e\n            \u003ctr\u003e\n\u003ctd\u003e2XL\u003c\/td\u003e\n\u003ctd\u003e28.35\u003c\/td\u003e\n\u003ctd\u003e51.97\u003c\/td\u003e\n\u003ctd\u003e21.65\u003c\/td\u003e\n\u003ctd\u003e24.41\u003c\/td\u003e\n\u003ctd\u003e41.14\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003c\/tbody\u003e\n        \u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"117.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/render_5924ec46-db7a-4a60-a0ac-3600d67dbe64.jpg?v=1793737679\u0026amp;width=96\"},{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/render_e2cf6856-f0f3-4601-ad4d-cb69e3488341.jpg?v=1793737679\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/render_5de1b55b-50ec-4861-87ad-c1b6ae9a13e4.jpg?v=1793737679\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eTrue to size — regular cut\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eTake your usual size. Between sizes? Size up.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:45.6%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Khaki \/ XS","offer_id":61521243013454,"sku":"SLT1102-001","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ S","offer_id":61521243046222,"sku":"SLT1102-002","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ M","offer_id":61521243078990,"sku":"SLT1102-003","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ L","offer_id":61521243111758,"sku":"SLT1102-004","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XL","offer_id":61521243144526,"sku":"SLT1102-005","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 2XL","offer_id":61521243177294,"sku":"SLT1102-006","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XS","offer_id":61521243210062,"sku":"SLT1102-007","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ S","offer_id":61521243242830,"sku":"SLT1102-008","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ M","offer_id":61521243275598,"sku":"SLT1102-009","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ L","offer_id":61521243308366,"sku":"SLT1102-010","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XL","offer_id":61521243341134,"sku":"SLT1102-011","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 2XL","offer_id":61521243373902,"sku":"SLT1102-012","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XS","offer_id":61521243406670,"sku":"SLT1102-013","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ S","offer_id":61521243439438,"sku":"SLT1102-014","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ M","offer_id":61521243472206,"sku":"SLT1102-015","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ L","offer_id":61521243504974,"sku":"SLT1102-016","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XL","offer_id":61521243537742,"sku":"SLT1102-017","price":117.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 2XL","offer_id":61521243570510,"sku":"SLT1102-018","price":117.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/render_5924ec46-db7a-4a60-a0ac-3600d67dbe64.jpg?v=1793737679"},{"product_id":"cerys-slim-fit-square-collar-coat","title":"Cerys - Slim-Fit Square Collar Coat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Warm Slim-Fit Coat With a Square Collar\u003c\/h2\u003e\n\u003cp\u003eCerys is a slim-fit coat with a sophisticated square collar, made for the office or casual outings. It is cut from a warm soft textile and sits close to the body.\u003c\/p\u003e\n\u003cp\u003eA single-breasted front closes the coat, and wide-waisted pockets add practicality for everyday carrying. The slim cut keeps the line neat through the body. Two colours: khaki and black.\u003c\/p\u003e\n\u003cp\u003eSized M to XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"69.99\" data-was=\"\" data-sizes='[\"M\",\"XXXL\",\"L\",\"S\",\"XXL\",\"XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/reese-elegant-woolen-winter-coat-for-women6_e14653b3-1bf7-4d3c-b360-ab77afb74b59.jpg?v=1793737679\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/reese-elegant-woolen-winter-coat-for-women7.jpg?v=1793737679\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"khaki \/ M","offer_id":61521243865422,"sku":"SLT1103-001","price":69.99,"currency_code":"USD","in_stock":true},{"title":"khaki \/ XXXL","offer_id":61521243898190,"sku":"SLT1103-002","price":69.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521243930958,"sku":"SLT1103-003","price":69.99,"currency_code":"USD","in_stock":true},{"title":"khaki \/ S","offer_id":61521243963726,"sku":"SLT1103-004","price":69.99,"currency_code":"USD","in_stock":true},{"title":"khaki \/ XXL","offer_id":61521243996494,"sku":"SLT1103-005","price":69.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521244029262,"sku":"SLT1103-006","price":69.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XXL","offer_id":61521244062030,"sku":"SLT1103-007","price":69.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XXXL","offer_id":61521244094798,"sku":"SLT1103-008","price":69.99,"currency_code":"USD","in_stock":true},{"title":"khaki \/ L","offer_id":61521244127566,"sku":"SLT1103-009","price":69.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521244160334,"sku":"SLT1103-010","price":69.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521244193102,"sku":"SLT1103-011","price":69.99,"currency_code":"USD","in_stock":true},{"title":"khaki \/ XL","offer_id":61521244225870,"sku":"SLT1103-012","price":69.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/reese-elegant-woolen-winter-coat-for-women6_e14653b3-1bf7-4d3c-b360-ab77afb74b59.jpg?v=1793737679"},{"product_id":"davina-hooded-padded-puffer-jacket","title":"Davina - Hooded Padded Puffer Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Hooded Puffer Made for Cold Weather\u003c\/h2\u003e\n\u003cp\u003eDavina is a hooded puffer jacket for women who want warmth and style in the cold season. The thickened, puffed feel adds comfort while giving excellent insulation against low temperatures.\u003c\/p\u003e\n\u003cp\u003eIt is made from a padded blend for warmth, and the hood adds extra cover on the coldest days. Choose from black, ivory white and coffee. Machine washable.\u003c\/p\u003e\n\u003cp\u003eSized S to M.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"75.99\" data-was=\"\" data-sizes='[\"S\",\"L\",\"XL\",\"M\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/delilah-elegant-hooded-winter-down-jacket4.jpg?v=1793737679\u0026amp;width=96\"},{\"v\":\"Ivory white\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/delilah-elegant-hooded-winter-down-jacket5.jpg?v=1793737679\u0026amp;width=96\"},{\"v\":\"Coffee color\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/delilah-elegant-hooded-winter-down-jacket6.jpg?v=1793737679\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Black \/ S","offer_id":61521244356942,"sku":"SLT1104-001","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Ivory white \/ L","offer_id":61521244389710,"sku":"SLT1104-002","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521244422478,"sku":"SLT1104-003","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Ivory white \/ XL","offer_id":61521244455246,"sku":"SLT1104-004","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521244488014,"sku":"SLT1104-005","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Ivory white \/ S","offer_id":61521244520782,"sku":"SLT1104-006","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Coffee color \/ XL","offer_id":61521244553550,"sku":"SLT1104-007","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Coffee color \/ L","offer_id":61521244586318,"sku":"SLT1104-008","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521244619086,"sku":"SLT1104-009","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Coffee color \/ S","offer_id":61521244651854,"sku":"SLT1104-010","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Ivory white \/ M","offer_id":61521244684622,"sku":"SLT1104-011","price":75.99,"currency_code":"USD","in_stock":true},{"title":"Coffee color \/ M","offer_id":61521244717390,"sku":"SLT1104-012","price":75.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/delilah-elegant-hooded-winter-down-jacket4.jpg?v=1793737679"},{"product_id":"eglantine-hooded-plush-zip-coat","title":"Eglantine - Hooded Plush Zip Coat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Warm Hooded Coat for Everyday Comfort\u003c\/h2\u003e\n\u003cp\u003eEglantine is a warm hooded coat made from a plush textile, with a casual fit and practical pockets. It is made for comfort through the colder months and everyday wear.\u003c\/p\u003e\n\u003cp\u003eA zip closes the front and the pockets keep essentials close. The casual cut suits everyday wear. Six colours: red, army green, black, navy, brown and grey.\u003c\/p\u003e\n\u003cp\u003eSized XXXL to L.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"73.99\" data-was=\"\" data-sizes='[\"XXXL\",\"S\",\"M\",\"XXL\",\"XL\",\"L\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/skyler-stylish-hooded-winter-coat-for-women9.jpg?v=1793737492\u0026amp;width=96\"},{\"v\":\"ArmyGreen\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/skyler-stylish-hooded-winter-coat-for-women10.jpg?v=1793737679\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/skyler-stylish-hooded-winter-coat-for-women11.jpg?v=1793737679\u0026amp;width=96\"},{\"v\":\"Navy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/skyler-stylish-hooded-winter-coat-for-women12.jpg?v=1793737679\u0026amp;width=96\"},{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/skyler-stylish-hooded-winter-coat-for-women13.jpg?v=1793737680\u0026amp;width=96\"},{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/skyler-stylish-hooded-winter-coat-for-women14.jpg?v=1793737680\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Red \/ XXXL","offer_id":61521246224718,"sku":"SLT1106-001","price":73.99,"currency_code":"USD","in_stock":true},{"title":"ArmyGreen \/ S","offer_id":61521246257486,"sku":"SLT1106-002","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XXXL","offer_id":61521246290254,"sku":"SLT1106-003","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ M","offer_id":61521246323022,"sku":"SLT1106-004","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XXL","offer_id":61521246355790,"sku":"SLT1106-005","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XXL","offer_id":61521246388558,"sku":"SLT1106-006","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521246421326,"sku":"SLT1106-007","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521246454094,"sku":"SLT1106-008","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ S","offer_id":61521246486862,"sku":"SLT1106-009","price":73.99,"currency_code":"USD","in_stock":true},{"title":"ArmyGreen \/ XXXL","offer_id":61521246519630,"sku":"SLT1106-010","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S","offer_id":61521246552398,"sku":"SLT1106-011","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ S","offer_id":61521246585166,"sku":"SLT1106-012","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ S","offer_id":61521246617934,"sku":"SLT1106-013","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ M","offer_id":61521246650702,"sku":"SLT1106-014","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ L","offer_id":61521246683470,"sku":"SLT1106-015","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521246716238,"sku":"SLT1106-016","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ L","offer_id":61521246749006,"sku":"SLT1106-017","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":61521246781774,"sku":"SLT1106-018","price":73.99,"currency_code":"USD","in_stock":true},{"title":"ArmyGreen \/ L","offer_id":61521246814542,"sku":"SLT1106-019","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XL","offer_id":61521246847310,"sku":"SLT1106-020","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":61521246880078,"sku":"SLT1106-021","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XL","offer_id":61521246912846,"sku":"SLT1106-022","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XXL","offer_id":61521246945614,"sku":"SLT1106-023","price":73.99,"currency_code":"USD","in_stock":true},{"title":"ArmyGreen \/ M","offer_id":61521246978382,"sku":"SLT1106-024","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XXXL","offer_id":61521247011150,"sku":"SLT1106-025","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XXXL","offer_id":61521247043918,"sku":"SLT1106-026","price":73.99,"currency_code":"USD","in_stock":true},{"title":"ArmyGreen \/ XL","offer_id":61521247076686,"sku":"SLT1106-027","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":61521247109454,"sku":"SLT1106-028","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ XL","offer_id":61521247142222,"sku":"SLT1106-029","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ XXXL","offer_id":61521247174990,"sku":"SLT1106-030","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ XXL","offer_id":61521247207758,"sku":"SLT1106-031","price":73.99,"currency_code":"USD","in_stock":true},{"title":"ArmyGreen \/ XXL","offer_id":61521247240526,"sku":"SLT1106-032","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XXL","offer_id":61521247273294,"sku":"SLT1106-033","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ M","offer_id":61521247306062,"sku":"SLT1106-034","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ L","offer_id":61521247338830,"sku":"SLT1106-035","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521247371598,"sku":"SLT1106-036","price":73.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/skyler-stylish-hooded-winter-coat-for-women9.jpg?v=1793737492"},{"product_id":"dunmore-plush-lined-winter-jacket","title":"Dunmore - Plush-Lined Winter Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Plush-Lined Jacket for Real Warmth\u003c\/h2\u003e\n\u003cp\u003eDunmore is a men's jacket lined in a warm plush textile, designed to bring comfort and warmth on the coldest days. The lining keeps you snug while the jacket still looks smart.\u003c\/p\u003e\n\u003cp\u003eThe cut is relaxed and flattering through the body, so the jacket sits easily over everyday layers. Five colours: black, navy blue, dark grey, khaki and army green. Machine washable.\u003c\/p\u003e\n\u003cp\u003eSized S to 3XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"82.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/william-cozy-mens-winter-jacket-with-sherpa-lining6.jpg?v=1793737687\u0026amp;width=96\"},{\"v\":\"Navy Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/william-cozy-mens-winter-jacket-with-sherpa-lining7.jpg?v=1793737687\u0026amp;width=96\"},{\"v\":\"Dark grey\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/william-cozy-mens-winter-jacket-with-sherpa-lining8.jpg?v=1793737686\u0026amp;width=96\"},{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/william-cozy-mens-winter-jacket-with-sherpa-lining9.jpg?v=1793737688\u0026amp;width=96\"},{\"v\":\"Army Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/william-cozy-mens-winter-jacket-with-sherpa-lining10.jpg?v=1793737687\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Black \/ S","offer_id":61521248158030,"sku":"SLT1107-001","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521248190798,"sku":"SLT1107-002","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521248223566,"sku":"SLT1107-003","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521248256334,"sku":"SLT1107-004","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":61521248289102,"sku":"SLT1107-005","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":61521248321870,"sku":"SLT1107-006","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ S","offer_id":61521248354638,"sku":"SLT1107-007","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ M","offer_id":61521248387406,"sku":"SLT1107-008","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ L","offer_id":61521248420174,"sku":"SLT1107-009","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ XL","offer_id":61521248452942,"sku":"SLT1107-010","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 2XL","offer_id":61521248485710,"sku":"SLT1107-011","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 3XL","offer_id":61521248518478,"sku":"SLT1107-012","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Dark grey \/ S","offer_id":61521248551246,"sku":"SLT1107-013","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Dark grey \/ M","offer_id":61521248584014,"sku":"SLT1107-014","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Dark grey \/ L","offer_id":61521248616782,"sku":"SLT1107-015","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Dark grey \/ XL","offer_id":61521248649550,"sku":"SLT1107-016","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Dark grey \/ 2XL","offer_id":61521248682318,"sku":"SLT1107-017","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Dark grey \/ 3XL","offer_id":61521248715086,"sku":"SLT1107-018","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ S","offer_id":61521248747854,"sku":"SLT1107-019","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ M","offer_id":61521248780622,"sku":"SLT1107-020","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ L","offer_id":61521248813390,"sku":"SLT1107-021","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XL","offer_id":61521248846158,"sku":"SLT1107-022","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 2XL","offer_id":61521248878926,"sku":"SLT1107-023","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 3XL","offer_id":61521248911694,"sku":"SLT1107-024","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ S","offer_id":61521248944462,"sku":"SLT1107-025","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ M","offer_id":61521248977230,"sku":"SLT1107-026","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ L","offer_id":61521249009998,"sku":"SLT1107-027","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ XL","offer_id":61521249042766,"sku":"SLT1107-028","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ 2XL","offer_id":61521249075534,"sku":"SLT1107-029","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ 3XL","offer_id":61521249108302,"sku":"SLT1107-030","price":82.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/william-cozy-mens-winter-jacket-with-sherpa-lining6.jpg?v=1793737687"},{"product_id":"delaney-draped-deep-pile-coat","title":"Delaney - Draped Deep-Pile Coat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Plush Coat Made for Comfort\u003c\/h2\u003e\n\u003cp\u003eDelaney is a warm plush coat with a fluid, draped silhouette. The deep-pile textile wraps around you in warmth, making it an easy choice for cold weather.\u003c\/p\u003e\n\u003cp\u003eThe soft draped line falls loosely rather than fitting close. Six colours: khaki beige, blossom pink, crimson red, graphite grey, mint green and mocha brown. Professional cleaning recommended.\u003c\/p\u003e\n\u003cp\u003eSized XS to 2XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"100.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Khaki Beige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Luxurious-Women-s-Shearling-Coat-for-Cold-Weather-7872.jpg?v=1793737688\u0026amp;width=96\"},{\"v\":\"Blossom Pink\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Luxurious-Women-s-Shearling-Coat-for-Cold-Weather-7900.jpg?v=1793737688\u0026amp;width=96\"},{\"v\":\"Crimson Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Luxurious-Women-s-Shearling-Coat-for-Cold-Weather-0.jpg?v=1793737688\u0026amp;width=96\"},{\"v\":\"Graphite Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Luxurious-Women-s-Shearling-Coat-for-Cold-Weather-9776.jpg?v=1793737688\u0026amp;width=96\"},{\"v\":\"Mint Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Luxurious-Women-s-Shearling-Coat-for-Cold-Weather-8912.jpg?v=1793737688\u0026amp;width=96\"},{\"v\":\"Mocha Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Luxurious-Women-s-Shearling-Coat-for-Cold-Weather-2712.jpg?v=1793737688\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Khaki Beige \/ XS","offer_id":61521249599822,"sku":"SLT1108-001","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Khaki Beige \/ S","offer_id":61521249632590,"sku":"SLT1108-002","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Khaki Beige \/ M","offer_id":61521249665358,"sku":"SLT1108-003","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Khaki Beige \/ L","offer_id":61521249698126,"sku":"SLT1108-004","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Khaki Beige \/ XL","offer_id":61521249730894,"sku":"SLT1108-005","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Khaki Beige \/ 2XL","offer_id":61521249763662,"sku":"SLT1108-006","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Blossom Pink \/ XS","offer_id":61521249796430,"sku":"SLT1108-007","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Blossom Pink \/ S","offer_id":61521249829198,"sku":"SLT1108-008","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Blossom Pink \/ M","offer_id":61521249861966,"sku":"SLT1108-009","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Blossom Pink \/ L","offer_id":61521249894734,"sku":"SLT1108-010","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Blossom Pink \/ XL","offer_id":61521249927502,"sku":"SLT1108-011","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Blossom Pink \/ 2XL","offer_id":61521249960270,"sku":"SLT1108-012","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Crimson Red \/ XS","offer_id":61521249993038,"sku":"SLT1108-013","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Crimson Red \/ S","offer_id":61521250025806,"sku":"SLT1108-014","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Crimson Red \/ M","offer_id":61521250058574,"sku":"SLT1108-015","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Crimson Red \/ L","offer_id":61521250091342,"sku":"SLT1108-016","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Crimson Red \/ XL","offer_id":61521250124110,"sku":"SLT1108-017","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Crimson Red \/ 2XL","offer_id":61521250156878,"sku":"SLT1108-018","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Graphite Gray \/ XS","offer_id":61521250189646,"sku":"SLT1108-019","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Graphite Gray \/ S","offer_id":61521250222414,"sku":"SLT1108-020","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Graphite Gray \/ M","offer_id":61521250255182,"sku":"SLT1108-021","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Graphite Gray \/ L","offer_id":61521250287950,"sku":"SLT1108-022","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Graphite Gray \/ XL","offer_id":61521250320718,"sku":"SLT1108-023","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Graphite Gray \/ 2XL","offer_id":61521250353486,"sku":"SLT1108-024","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Mint Green \/ XS","offer_id":61521250386254,"sku":"SLT1108-025","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Mint Green \/ S","offer_id":61521250419022,"sku":"SLT1108-026","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Mint Green \/ M","offer_id":61521250451790,"sku":"SLT1108-027","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Mint Green \/ L","offer_id":61521250484558,"sku":"SLT1108-028","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Mint Green \/ XL","offer_id":61521250517326,"sku":"SLT1108-029","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Mint Green \/ 2XL","offer_id":61521250550094,"sku":"SLT1108-030","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Mocha Brown \/ XS","offer_id":61521250582862,"sku":"SLT1108-031","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Mocha Brown \/ S","offer_id":61521250615630,"sku":"SLT1108-032","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Mocha Brown \/ M","offer_id":61521250648398,"sku":"SLT1108-033","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Mocha Brown \/ L","offer_id":61521250681166,"sku":"SLT1108-034","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Mocha Brown \/ XL","offer_id":61521250713934,"sku":"SLT1108-035","price":100.99,"currency_code":"USD","in_stock":true},{"title":"Mocha Brown \/ 2XL","offer_id":61521250746702,"sku":"SLT1108-036","price":100.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Luxurious-Women-s-Shearling-Coat-for-Cold-Weather-0.jpg?v=1793737688"},{"product_id":"annora-oversized-double-breasted-trench-coat","title":"Annora - Oversized Double-Breasted Trench Coat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eAn Oversized Casual Trench Coat\u003c\/h2\u003e\n\u003cp\u003eAnnora is an oversized casual trench coat made for warm weather. A flowy silhouette and double-breasted style combine comfort with a polished shape, and the loose cut falls easily from the shoulders.\u003c\/p\u003e\n\u003cp\u003eThe relaxed, flowing design suits many occasions and keeps the look versatile, whether the coat is worn closed or open. Choose from black, grey and khaki.\u003c\/p\u003e\n\u003cp\u003eSized S to XL. The sizing table below gives the maker's garment measurements for each size.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eSize\u003c\/th\u003e\n\u003cth\u003eChest (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eLength (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eShoulder (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eSleeve (cm \/ in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eS\u003c\/td\u003e\n\u003ctd\u003e124 \/ 48.8\u003c\/td\u003e\n\u003ctd\u003e125 \/ 49.2\u003c\/td\u003e\n\u003ctd\u003e52 \/ 20.5\u003c\/td\u003e\n\u003ctd\u003e51 \/ 20.1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eM\u003c\/td\u003e\n\u003ctd\u003e128 \/ 50.4\u003c\/td\u003e\n\u003ctd\u003e126 \/ 49.6\u003c\/td\u003e\n\u003ctd\u003e53 \/ 20.9\u003c\/td\u003e\n\u003ctd\u003e52 \/ 20.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eL\u003c\/td\u003e\n\u003ctd\u003e132 \/ 52.0\u003c\/td\u003e\n\u003ctd\u003e127 \/ 50.0\u003c\/td\u003e\n\u003ctd\u003e54 \/ 21.3\u003c\/td\u003e\n\u003ctd\u003e53 \/ 20.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eXL\u003c\/td\u003e\n\u003ctd\u003e136 \/ 53.5\u003c\/td\u003e\n\u003ctd\u003e128 \/ 50.4\u003c\/td\u003e\n\u003ctd\u003e55 \/ 21.7\u003c\/td\u003e\n\u003ctd\u003e54 \/ 21.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"66.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/francesca-oversized-casual-trench-coat-for-women4.jpg?v=1793737687\u0026amp;width=96\"},{\"v\":\"Grey\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/francesca-oversized-casual-trench-coat-for-women5.jpg?v=1793737687\u0026amp;width=96\"},{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/francesca-oversized-casual-trench-coat-for-women6.jpg?v=1793737693\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eRuns large — oversized cut\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eSize down. Between sizes? Take the smaller size. The larger sizes are cut tighter - size up in XL and above.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:91.1%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Black \/ S","offer_id":61521251434830,"sku":"SLT1109-001","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521251467598,"sku":"SLT1109-002","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521251500366,"sku":"SLT1109-003","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521251533134,"sku":"SLT1109-004","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ S","offer_id":61521251565902,"sku":"SLT1109-005","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ M","offer_id":61521251598670,"sku":"SLT1109-006","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ L","offer_id":61521251631438,"sku":"SLT1109-007","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ XL","offer_id":61521251664206,"sku":"SLT1109-008","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ S","offer_id":61521251696974,"sku":"SLT1109-009","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ M","offer_id":61521251729742,"sku":"SLT1109-010","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ L","offer_id":61521251762510,"sku":"SLT1109-011","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XL","offer_id":61521251795278,"sku":"SLT1109-012","price":66.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/francesca-oversized-casual-trench-coat-for-women4.jpg?v=1793737687"},{"product_id":"cosette-double-breasted-trench-coat","title":"Cosette - Double-Breasted Trench Coat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Double-Breasted Trench Coat for All Year\u003c\/h2\u003e\n\u003cp\u003eCosette is a double-breasted trench coat for women who want both style and function. It suits warm weather, and the versatile look complements most casual outfits without any fuss.\u003c\/p\u003e\n\u003cp\u003eThe front closes with double-breasted buttons for a classic line that stays smart over any outfit. Four colours: purple, beige, black and khaki. Machine washable.\u003c\/p\u003e\n\u003cp\u003eSized XXL to M.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"69.99\" data-was=\"\" data-sizes='[\"XXL\",\"L\",\"XL\",\"M\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"purple\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/felicity-elegant-black-trench-coat-for-women5.jpg?v=1793737695\u0026amp;width=96\"},{\"v\":\"beige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/felicity-elegant-black-trench-coat-for-women6.jpg?v=1793737694\u0026amp;width=96\"},{\"v\":\"black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/felicity-elegant-black-trench-coat-for-women7.jpg?v=1793737694\u0026amp;width=96\"},{\"v\":\"khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/felicity-elegant-black-trench-coat-for-women8.jpg?v=1793737694\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"purple \/ XXL","offer_id":61521255006542,"sku":"SLT1111-001","price":69.99,"currency_code":"USD","in_stock":true},{"title":"beige \/ L","offer_id":61521255039310,"sku":"SLT1111-002","price":69.99,"currency_code":"USD","in_stock":true},{"title":"black \/ XL","offer_id":61521255072078,"sku":"SLT1111-003","price":69.99,"currency_code":"USD","in_stock":true},{"title":"beige \/ XXL","offer_id":61521255104846,"sku":"SLT1111-004","price":69.99,"currency_code":"USD","in_stock":true},{"title":"purple \/ XL","offer_id":61521255137614,"sku":"SLT1111-005","price":69.99,"currency_code":"USD","in_stock":true},{"title":"purple \/ L","offer_id":61521255170382,"sku":"SLT1111-006","price":69.99,"currency_code":"USD","in_stock":true},{"title":"beige \/ XL","offer_id":61521255203150,"sku":"SLT1111-007","price":69.99,"currency_code":"USD","in_stock":true},{"title":"purple \/ M","offer_id":61521255235918,"sku":"SLT1111-008","price":69.99,"currency_code":"USD","in_stock":true},{"title":"black \/ XXL","offer_id":61521255268686,"sku":"SLT1111-009","price":69.99,"currency_code":"USD","in_stock":true},{"title":"black \/ M","offer_id":61521255301454,"sku":"SLT1111-010","price":69.99,"currency_code":"USD","in_stock":true},{"title":"khaki \/ L","offer_id":61521255334222,"sku":"SLT1111-011","price":69.99,"currency_code":"USD","in_stock":true},{"title":"khaki \/ XL","offer_id":61521255366990,"sku":"SLT1111-012","price":69.99,"currency_code":"USD","in_stock":true},{"title":"khaki \/ XXL","offer_id":61521255399758,"sku":"SLT1111-013","price":69.99,"currency_code":"USD","in_stock":true},{"title":"khaki \/ M","offer_id":61521255432526,"sku":"SLT1111-014","price":69.99,"currency_code":"USD","in_stock":true},{"title":"black \/ L","offer_id":61521255465294,"sku":"SLT1111-015","price":69.99,"currency_code":"USD","in_stock":true},{"title":"beige \/ M","offer_id":61521255498062,"sku":"SLT1111-016","price":69.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/felicity-elegant-black-trench-coat-for-women5.jpg?v=1793737695"},{"product_id":"eugenie-belted-double-breasted-trench-coat","title":"Eugenie - Belted Double-Breasted Trench Coat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Double-Breasted Trench Coat\u003c\/h2\u003e\n\u003cp\u003eEugenie is a trench coat cut from a warm soft textile, giving both warmth and a sharp shape. The double-breasted design adds a belt and a shoulder badge for casual streetwear or formal occasions.\u003c\/p\u003e\n\u003cp\u003eIt has a casual streetwear style and a double-breasted closure. The belt shapes the waist, and the shoulder badge adds a neat detail. Three colours: blue, black and red.\u003c\/p\u003e\n\u003cp\u003eSized M to XXXL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"81.99\" data-was=\"\" data-sizes='[\"M\",\"XXL\",\"XL\",\"L\",\"XXXL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/florence-elegant-black-wool-blend-trench-coat-women_8.jpg?v=1793737695\u0026amp;width=96\"},{\"v\":\"black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/florence-elegant-black-wool-blend-trench-coat-women_6.jpg?v=1793737694\u0026amp;width=96\"},{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/florence-elegant-black-wool-blend-trench-coat-women_7.jpg?v=1793737694\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Blue \/ M","offer_id":61521255760206,"sku":"SLT1112-001","price":81.99,"currency_code":"USD","in_stock":true},{"title":"black \/ XXL","offer_id":61521255792974,"sku":"SLT1112-002","price":81.99,"currency_code":"USD","in_stock":true},{"title":"black \/ XL","offer_id":61521255825742,"sku":"SLT1112-003","price":81.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XXL","offer_id":61521255858510,"sku":"SLT1112-004","price":81.99,"currency_code":"USD","in_stock":true},{"title":"black \/ M","offer_id":61521255891278,"sku":"SLT1112-005","price":81.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XL","offer_id":61521255924046,"sku":"SLT1112-006","price":81.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XXL","offer_id":61521255956814,"sku":"SLT1112-007","price":81.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ L","offer_id":61521255989582,"sku":"SLT1112-008","price":81.99,"currency_code":"USD","in_stock":true},{"title":"black \/ L","offer_id":61521256022350,"sku":"SLT1112-009","price":81.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ L","offer_id":61521256055118,"sku":"SLT1112-010","price":81.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XXXL","offer_id":61521256087886,"sku":"SLT1112-011","price":81.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XL","offer_id":61521256120654,"sku":"SLT1112-012","price":81.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ M","offer_id":61521256153422,"sku":"SLT1112-013","price":81.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XXXL","offer_id":61521256186190,"sku":"SLT1112-014","price":81.99,"currency_code":"USD","in_stock":true},{"title":"black \/ XXXL","offer_id":61521256218958,"sku":"SLT1112-015","price":81.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/florence-elegant-black-wool-blend-trench-coat-women_8.jpg?v=1793737695"},{"product_id":"ainsley-oversized-hooded-zip-cape-coat","title":"Ainsley - Oversized Hooded Zip Cape Coat","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eAn Oversized Cape Coat With a Fluffy Trimmed Hood\u003c\/h2\u003e\n\u003cp\u003eAinsley is a wide, cape-shaped coat that falls loosely from the shoulders to the hip. A fluffy trim in the same shade frames the hood, a long zip closes the front, and the batwing body narrows into fitted ribbed cuffs.\u003c\/p\u003e\n\u003cp\u003eTwo large patch pockets sit at the front for hands, keys and phone. There is room to layer a knit underneath. Seven colours, from soft grey and white to bold pink and red. Hand wash cold or dry clean and dry flat.\u003c\/p\u003e\n\u003cp\u003eSized S to 3XL. The sizing table below gives the maker's garment measurements for each size.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eSize\u003c\/th\u003e\n\u003cth\u003eChest (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eLength (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eSleeve (cm \/ in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eS\u003c\/td\u003e\n\u003ctd\u003e135 \/ 53.1\u003c\/td\u003e\n\u003ctd\u003e69 \/ 27.2\u003c\/td\u003e\n\u003ctd\u003e65 \/ 25.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eM\u003c\/td\u003e\n\u003ctd\u003e140 \/ 55.1\u003c\/td\u003e\n\u003ctd\u003e70 \/ 27.6\u003c\/td\u003e\n\u003ctd\u003e66 \/ 26.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eL\u003c\/td\u003e\n\u003ctd\u003e145 \/ 57.1\u003c\/td\u003e\n\u003ctd\u003e71 \/ 28.0\u003c\/td\u003e\n\u003ctd\u003e67 \/ 26.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eXL\u003c\/td\u003e\n\u003ctd\u003e150 \/ 59.1\u003c\/td\u003e\n\u003ctd\u003e72 \/ 28.3\u003c\/td\u003e\n\u003ctd\u003e68 \/ 26.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2XL\u003c\/td\u003e\n\u003ctd\u003e155 \/ 61.0\u003c\/td\u003e\n\u003ctd\u003e73 \/ 28.7\u003c\/td\u003e\n\u003ctd\u003e69 \/ 27.2\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3XL\u003c\/td\u003e\n\u003ctd\u003e160 \/ 63.0\u003c\/td\u003e\n\u003ctd\u003e74 \/ 29.1\u003c\/td\u003e\n\u003ctd\u003e70 \/ 27.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"116.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Pink\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/theodora-womens-oversized-hooded-zip-cape-coat_f1_studio.jpg?v=1793709786\u0026amp;width=96\"},{\"v\":\"Grey\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/theodora-womens-oversized-hooded-zip-cape-coat_c_grey_studio.jpg?v=1793709786\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/theodora-womens-oversized-hooded-zip-cape-coat_c_black_studio.jpg?v=1793709786\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/theodora-womens-oversized-hooded-zip-cape-coat_c_green_studio.jpg?v=1793709786\u0026amp;width=96\"},{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/theodora-womens-oversized-hooded-zip-cape-coat_c_brown_studio.jpg?v=1793709785\u0026amp;width=96\"},{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/theodora-womens-oversized-hooded-zip-cape-coat_c_red_studio.jpg?v=1793709786\u0026amp;width=96\"},{\"v\":\"White\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/theodora-womens-oversized-hooded-zip-cape-coat_c_white_studio.jpg?v=1793709786\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eRuns large — oversized cut\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eSize down. Between sizes? Take the smaller size. The larger sizes are cut tighter - size up in XL and above.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:94.0%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Pink \/ S","offer_id":61521258938702,"sku":"SLT1113-001","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ M","offer_id":61521258971470,"sku":"SLT1113-002","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ L","offer_id":61521259004238,"sku":"SLT1113-003","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ XL","offer_id":61521259037006,"sku":"SLT1113-004","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ 2XL","offer_id":61521259069774,"sku":"SLT1113-005","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ 3XL","offer_id":61521259102542,"sku":"SLT1113-006","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ S","offer_id":61521259135310,"sku":"SLT1113-007","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ M","offer_id":61521259168078,"sku":"SLT1113-008","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ L","offer_id":61521259200846,"sku":"SLT1113-009","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ XL","offer_id":61521259233614,"sku":"SLT1113-010","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ 2XL","offer_id":61521259266382,"sku":"SLT1113-011","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ 3XL","offer_id":61521259299150,"sku":"SLT1113-012","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521259331918,"sku":"SLT1113-013","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521259364686,"sku":"SLT1113-014","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521259397454,"sku":"SLT1113-015","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521259430222,"sku":"SLT1113-016","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":61521259462990,"sku":"SLT1113-017","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":61521259495758,"sku":"SLT1113-018","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ S","offer_id":61521259528526,"sku":"SLT1113-019","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ M","offer_id":61521259561294,"sku":"SLT1113-020","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ L","offer_id":61521259594062,"sku":"SLT1113-021","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XL","offer_id":61521259626830,"sku":"SLT1113-022","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 2XL","offer_id":61521259659598,"sku":"SLT1113-023","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 3XL","offer_id":61521259692366,"sku":"SLT1113-024","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S","offer_id":61521259725134,"sku":"SLT1113-025","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":61521259757902,"sku":"SLT1113-026","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":61521259790670,"sku":"SLT1113-027","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":61521259823438,"sku":"SLT1113-028","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 2XL","offer_id":61521259856206,"sku":"SLT1113-029","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 3XL","offer_id":61521259888974,"sku":"SLT1113-030","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ S","offer_id":61521259921742,"sku":"SLT1113-031","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ M","offer_id":61521259954510,"sku":"SLT1113-032","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ L","offer_id":61521259987278,"sku":"SLT1113-033","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XL","offer_id":61521260020046,"sku":"SLT1113-034","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 2XL","offer_id":61521260052814,"sku":"SLT1113-035","price":116.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 3XL","offer_id":61521260085582,"sku":"SLT1113-036","price":116.99,"currency_code":"USD","in_stock":true},{"title":"White \/ S","offer_id":61521260118350,"sku":"SLT1113-037","price":116.99,"currency_code":"USD","in_stock":true},{"title":"White \/ M","offer_id":61521260151118,"sku":"SLT1113-038","price":116.99,"currency_code":"USD","in_stock":true},{"title":"White \/ L","offer_id":61521260183886,"sku":"SLT1113-039","price":116.99,"currency_code":"USD","in_stock":true},{"title":"White \/ XL","offer_id":61521260216654,"sku":"SLT1113-040","price":116.99,"currency_code":"USD","in_stock":true},{"title":"White \/ 2XL","offer_id":61521260249422,"sku":"SLT1113-041","price":116.99,"currency_code":"USD","in_stock":true},{"title":"White \/ 3XL","offer_id":61521260282190,"sku":"SLT1113-042","price":116.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/theodora-womens-oversized-hooded-zip-cape-coat_f1_studio.jpg?v=1793709786"},{"product_id":"eastwick-stand-collar-ribbed-button-jacket","title":"Eastwick - Stand Collar Ribbed Button Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Stand Collar Jacket With a Soft Ribbed Texture\u003c\/h2\u003e\n\u003cp\u003eEastwick is a hip-length jacket with a high stand collar that can be worn turned up or laid flat. A single row of dark buttons closes the front, and the soft textile has a fine vertical rib that catches the light.\u003c\/p\u003e\n\u003cp\u003eThe cut is straight and close through the body, with side pockets at the hips. Over a rollneck and dark jeans it looks put together. Five colours: army green, grey, brown, black and burgundy. Machine wash cold on a gentle cycle.\u003c\/p\u003e\n\u003cp\u003eSized S to 3XL. The sizing table below gives the maker's garment measurements for each size.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M235.32,73.37,182.63,20.69a16,16,0,0,0-22.63,0L20.68,160a16,16,0,0,0,0,22.63l52.69,52.68a16,16,0,0,0,22.63,0L235.32,96A16,16,0,0,0,235.32,73.37ZM84.68,224,32,171.31l32-32,26.34,26.35a8,8,0,0,0,11.32-11.32L75.31,128,96,107.31l26.34,26.35a8,8,0,0,0,11.32-11.32L107.31,96,128,75.31l26.34,26.35a8,8,0,0,0,11.32-11.32L139.31,64l32-32L224,84.69Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSizing Table\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eSize\u003c\/th\u003e\n\u003cth\u003eChest (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eLength (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eShoulder (cm \/ in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eS\u003c\/td\u003e\n\u003ctd\u003e105 \/ 41.3\u003c\/td\u003e\n\u003ctd\u003e70 \/ 27.6\u003c\/td\u003e\n\u003ctd\u003e47.5 \/ 18.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eM\u003c\/td\u003e\n\u003ctd\u003e111 \/ 43.7\u003c\/td\u003e\n\u003ctd\u003e72 \/ 28.3\u003c\/td\u003e\n\u003ctd\u003e49 \/ 19.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eL\u003c\/td\u003e\n\u003ctd\u003e117 \/ 46.1\u003c\/td\u003e\n\u003ctd\u003e74 \/ 29.1\u003c\/td\u003e\n\u003ctd\u003e50.5 \/ 19.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eXL\u003c\/td\u003e\n\u003ctd\u003e123 \/ 48.4\u003c\/td\u003e\n\u003ctd\u003e76 \/ 29.9\u003c\/td\u003e\n\u003ctd\u003e52 \/ 20.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2XL\u003c\/td\u003e\n\u003ctd\u003e131 \/ 51.6\u003c\/td\u003e\n\u003ctd\u003e78 \/ 30.7\u003c\/td\u003e\n\u003ctd\u003e54 \/ 21.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3XL\u003c\/td\u003e\n\u003ctd\u003e139 \/ 54.7\u003c\/td\u003e\n\u003ctd\u003e80 \/ 31.5\u003c\/td\u003e\n\u003ctd\u003e56 \/ 22.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"79.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Army Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lorenzo-mens-stand-collar-ribbed-button-front-jacket_f1_studio.jpg?v=1793709787\u0026amp;width=96\"},{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lorenzo-mens-stand-collar-ribbed-button-front-jacket_c_gray_studio.jpg?v=1793709787\u0026amp;width=96\"},{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lorenzo-mens-stand-collar-ribbed-button-front-jacket_c_brown_studio.jpg?v=1793709787\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lorenzo-mens-stand-collar-ribbed-button-front-jacket_c_black_studio.jpg?v=1793709787\u0026amp;width=96\"},{\"v\":\"Burgundy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lorenzo-mens-stand-collar-ribbed-button-front-jacket_c_burgundy_studio.jpg?v=1793709787\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003cdiv class=\"slt-fit\"\u003e\n\u003cdiv class=\"slt-fit__h\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 9h18v6H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 9v3M11 9v4M15 9v3M19 9v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-fit__lbl\"\u003eFit\u003c\/span\u003e\u003ca class=\"slt-fit__link\" href=\"#slt-size-guide\"\u003eSizing table\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp class=\"slt-fit__v\"\u003eTrue to size — slim cut\u003c\/p\u003e\n\u003cp class=\"slt-fit__a\"\u003eTake your usual size. Between sizes? Size up.\u003c\/p\u003e\n\u003cdiv class=\"slt-fit__track\"\u003e\u003cspan class=\"slt-fit__dot\" style=\"left:46.9%\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"slt-fit__scale\"\u003e\n\u003cspan class=\"\"\u003eRuns small\u003c\/span\u003e\u003cspan class=\"slt-fit__on\"\u003eTrue to size\u003c\/span\u003e\u003cspan class=\"\"\u003eRuns large\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Army Green \/ S","offer_id":61521260806478,"sku":"SLT1114-001","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ M","offer_id":61521260839246,"sku":"SLT1114-002","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ L","offer_id":61521260872014,"sku":"SLT1114-003","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ XL","offer_id":61521260904782,"sku":"SLT1114-004","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ 2XL","offer_id":61521260937550,"sku":"SLT1114-005","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Army Green \/ 3XL","offer_id":61521260970318,"sku":"SLT1114-006","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ S","offer_id":61521261003086,"sku":"SLT1114-007","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ M","offer_id":61521261035854,"sku":"SLT1114-008","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ L","offer_id":61521261068622,"sku":"SLT1114-009","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XL","offer_id":61521261101390,"sku":"SLT1114-010","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 2XL","offer_id":61521261134158,"sku":"SLT1114-011","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 3XL","offer_id":61521261166926,"sku":"SLT1114-012","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S","offer_id":61521261199694,"sku":"SLT1114-013","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":61521261232462,"sku":"SLT1114-014","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":61521261265230,"sku":"SLT1114-015","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":61521261297998,"sku":"SLT1114-016","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 2XL","offer_id":61521261330766,"sku":"SLT1114-017","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 3XL","offer_id":61521261363534,"sku":"SLT1114-018","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521261396302,"sku":"SLT1114-019","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521261429070,"sku":"SLT1114-020","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521261461838,"sku":"SLT1114-021","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521261494606,"sku":"SLT1114-022","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":61521261527374,"sku":"SLT1114-023","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":61521261560142,"sku":"SLT1114-024","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Burgundy \/ S","offer_id":61521261592910,"sku":"SLT1114-025","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Burgundy \/ M","offer_id":61521261625678,"sku":"SLT1114-026","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Burgundy \/ L","offer_id":61521261658446,"sku":"SLT1114-027","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Burgundy \/ XL","offer_id":61521261691214,"sku":"SLT1114-028","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Burgundy \/ 2XL","offer_id":61521261723982,"sku":"SLT1114-029","price":79.99,"currency_code":"USD","in_stock":true},{"title":"Burgundy \/ 3XL","offer_id":61521261756750,"sku":"SLT1114-030","price":79.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lorenzo-mens-stand-collar-ribbed-button-front-jacket_f1_studio.jpg?v=1793709787"},{"product_id":"elspeth-oversized-hooded-bomber-jacket","title":"Elspeth - Oversized Hooded Bomber Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eAn Oversized Hooded Jacket With a Cosy Fluffy Lining\u003c\/h2\u003e\n\u003cp\u003eElspeth is a roomy bomber-style jacket with a hood, lined from hem to hood in a thick, warm fluffy textile. The outer is a smooth soft durable textile, so the jacket stays light while the lining does the warming.\u003c\/p\u003e\n\u003cp\u003eThe front closes with a zip and snaps, the shoulders drop low for a slouchy shape, and ribbed cuffs and hem keep the cold out. Two side pockets keep hands warm. Three colours: cream, black and pale blue. Machine wash cold on a gentle cycle.\u003c\/p\u003e\n\u003cp\u003eSized S to 2XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"82.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Cream\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/liesel-womens-hooded-oversized-jacket-cosy-lining_f1_studio.jpg?v=1793709789\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/liesel-womens-hooded-oversized-jacket-cosy-lining_c_black_studio.jpg?v=1793709788\u0026amp;width=96\"},{\"v\":\"Pale Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/liesel-womens-hooded-oversized-jacket-cosy-lining_c_pale-blue_studio.jpg?v=1793709788\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Cream \/ S","offer_id":61521262018894,"sku":"SLT1115-001","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Cream \/ M","offer_id":61521262051662,"sku":"SLT1115-002","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Cream \/ L","offer_id":61521262084430,"sku":"SLT1115-003","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Cream \/ XL","offer_id":61521262117198,"sku":"SLT1115-004","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Cream \/ 2XL","offer_id":61521262149966,"sku":"SLT1115-005","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521262182734,"sku":"SLT1115-006","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521262215502,"sku":"SLT1115-007","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521262248270,"sku":"SLT1115-008","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521262281038,"sku":"SLT1115-009","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":61521262313806,"sku":"SLT1115-010","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Pale Blue \/ S","offer_id":61521262346574,"sku":"SLT1115-011","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Pale Blue \/ M","offer_id":61521262379342,"sku":"SLT1115-012","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Pale Blue \/ L","offer_id":61521262412110,"sku":"SLT1115-013","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Pale Blue \/ XL","offer_id":61521262444878,"sku":"SLT1115-014","price":82.99,"currency_code":"USD","in_stock":true},{"title":"Pale Blue \/ 2XL","offer_id":61521262477646,"sku":"SLT1115-015","price":82.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/liesel-womens-hooded-oversized-jacket-cosy-lining_f1_studio.jpg?v=1793709789"},{"product_id":"aisling-retro-striped-puffer-jacket","title":"Aisling - Retro Striped Puffer Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Retro Striped Jacket for Cold Weather\u003c\/h2\u003e\n\u003cp\u003eAisling is a vibrant colour-blocked padded jacket with a bold striped design. A high collar and soft breathable cuffs add vintage flair along with insulation for chilly days or outings.\u003c\/p\u003e\n\u003cp\u003eIt is made from a soft durable textile, with a bold striped pattern across the body. Available in multi-colour stripes on navy, azure and black. Machine wash cold.\u003c\/p\u003e\n\u003cp\u003eSized XS to 2XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"73.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Navy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amara-stylish-retro-striped-puffer-jacket-for-winter_f1_studio.jpg?v=1793709799\u0026amp;width=96\"},{\"v\":\"Azure\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amara-stylish-retro-striped-puffer-jacket-for-winter_c_azure_studio.jpg?v=1793709798\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amara-stylish-retro-striped-puffer-jacket-for-winter_c_black_studio.jpg?v=1793709799\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Navy \/ XS","offer_id":61521271193934,"sku":"SLT1121-001","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ S","offer_id":61521271226702,"sku":"SLT1121-002","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ M","offer_id":61521271259470,"sku":"SLT1121-003","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ L","offer_id":61521271292238,"sku":"SLT1121-004","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ XL","offer_id":61521271325006,"sku":"SLT1121-005","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ 2XL","offer_id":61521271357774,"sku":"SLT1121-006","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Azure \/ XS","offer_id":61521271390542,"sku":"SLT1121-007","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Azure \/ S","offer_id":61521271423310,"sku":"SLT1121-008","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Azure \/ M","offer_id":61521271456078,"sku":"SLT1121-009","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Azure \/ L","offer_id":61521271488846,"sku":"SLT1121-010","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Azure \/ XL","offer_id":61521271521614,"sku":"SLT1121-011","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Azure \/ 2XL","offer_id":61521271554382,"sku":"SLT1121-012","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XS","offer_id":61521271587150,"sku":"SLT1121-013","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521271619918,"sku":"SLT1121-014","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521271652686,"sku":"SLT1121-015","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521271685454,"sku":"SLT1121-016","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521271718222,"sku":"SLT1121-017","price":73.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":61521271750990,"sku":"SLT1121-018","price":73.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amara-stylish-retro-striped-puffer-jacket-for-winter_f1_studio.jpg?v=1793709799"},{"product_id":"bronwen-cropped-cut-out-puffer-jacket","title":"Bronwen - Cropped Cut-Out Puffer Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Cropped Jacket for Modern Fashion\u003c\/h2\u003e\n\u003cp\u003eBronwen is a cropped padded jacket with a unique cut-out design and a tall padded collar. It gives warmth while making a bold fashion statement.\u003c\/p\u003e\n\u003cp\u003eIt is made from a padded textile and has a casual, trendy style that works for everyday wear. Choose from black, gray and ivory. Machine washable.\u003c\/p\u003e\n\u003cp\u003eSized XS to XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"85.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/nadia-chic-cropped-puffer-jacket-for-women_f1_studio.jpg?v=1793709799\u0026amp;width=96\"},{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/nadia-chic-cropped-puffer-jacket-for-women_c_gray_studio.jpg?v=1793709799\u0026amp;width=96\"},{\"v\":\"Ivory\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/nadia-chic-cropped-puffer-jacket-for-women_c_ivory_studio.jpg?v=1793709799\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Black \/ XS","offer_id":61521272013134,"sku":"SLT1122-001","price":85.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521272045902,"sku":"SLT1122-002","price":85.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521272078670,"sku":"SLT1122-003","price":85.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521272111438,"sku":"SLT1122-004","price":85.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521272144206,"sku":"SLT1122-005","price":85.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XS","offer_id":61521272176974,"sku":"SLT1122-006","price":85.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ S","offer_id":61521272209742,"sku":"SLT1122-007","price":85.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ M","offer_id":61521272242510,"sku":"SLT1122-008","price":85.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ L","offer_id":61521272275278,"sku":"SLT1122-009","price":85.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XL","offer_id":61521272308046,"sku":"SLT1122-010","price":85.99,"currency_code":"USD","in_stock":true},{"title":"Ivory \/ XS","offer_id":61521272340814,"sku":"SLT1122-011","price":85.99,"currency_code":"USD","in_stock":true},{"title":"Ivory \/ S","offer_id":61521272373582,"sku":"SLT1122-012","price":85.99,"currency_code":"USD","in_stock":true},{"title":"Ivory \/ M","offer_id":61521272406350,"sku":"SLT1122-013","price":85.99,"currency_code":"USD","in_stock":true},{"title":"Ivory \/ L","offer_id":61521272439118,"sku":"SLT1122-014","price":85.99,"currency_code":"USD","in_stock":true},{"title":"Ivory \/ XL","offer_id":61521272471886,"sku":"SLT1122-015","price":85.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/nadia-chic-cropped-puffer-jacket-for-women_f1_studio.jpg?v=1793709799"},{"product_id":"corinne-drawstring-hooded-puffer-jacket","title":"Corinne - Drawstring Hooded Puffer Jacket","description":"\u003cstyle\u003e\n.slt-pdp{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  font-family:'Archivo','Jost',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:var(--ink);max-width:820px;margin:0;\n  font-size:15px;line-height:1.65;}\n.slt-pdp *{box-sizing:border-box;}\n.slt-pdp details{border-top:1px solid var(--ash);margin:0;}\n.slt-pdp details:last-of-type{border-bottom:1px solid var(--ash);}\n.slt-pdp summary{display:flex;align-items:center;gap:10px;cursor:pointer;\n  padding:16px 2px;list-style:none;font-weight:600;font-size:15px;\n  letter-spacing:.01em;color:var(--ink);}\n.slt-pdp summary::-webkit-details-marker{display:none;}\n.slt-pdp summary:hover{color:var(--indigo);}\n.slt-pdp summary svg{color:var(--indigo);}\n.slt-pdp .slt-t{flex:1 1 auto;}\n.slt-pdp .slt-x{flex:0 0 auto;width:14px;height:14px;position:relative;\n  color:var(--indigo);}\n.slt-pdp .slt-x::before,.slt-pdp .slt-x::after{content:\"\";position:absolute;\n  background:currentColor;transition:transform .18s ease;}\n.slt-pdp .slt-x::before{left:0;top:6px;width:14px;height:1.5px;}\n.slt-pdp .slt-x::after{left:6px;top:0;width:1.5px;height:14px;}\n.slt-pdp details[open] .slt-x::after{transform:scaleY(0);}\n.slt-pdp .slt-b{padding:0 2px 20px;}\n.slt-pdp .slt-b \u003e :first-child{margin-top:0;}\n.slt-pdp .slt-b \u003e :last-child{margin-bottom:0;}\n.slt-pdp h2{font-size:19px;line-height:1.35;margin:0 0 10px;font-weight:600;}\n.slt-pdp h3{font-size:15px;margin:20px 0 8px;font-weight:600;}\n.slt-pdp p{margin:0 0 12px;}\n.slt-pdp ul{margin:0 0 12px;padding-left:20px;}\n.slt-pdp li{margin:0 0 6px;}\n.slt-pdp a{color:var(--indigo);text-decoration:underline;\n  text-underline-offset:2px;}\n.slt-pdp img{max-width:100%;max-height:460px;width:auto;height:auto;\n  border-radius:14px;display:block;margin:16px auto;}\n\/* the source bodies wrap each image in a centring flex div *\/\n.slt-pdp div[style*=\"justify-content: center\"]{display:block !important;}\n.slt-pdp figure{margin:16px 0;}\n.slt-pdp .slt-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}\n.slt-pdp table{width:100%;min-width:460px;border-collapse:collapse;\n  font-size:13px;text-align:center;}\n.slt-pdp th,.slt-pdp td{border:1px solid var(--ash);padding:7px 6px;}\n.slt-pdp thead th{background:var(--chalk);font-weight:600;}\n.slt-pdp tbody tr:nth-child(even){background:rgba(237,237,234,.55);}\n.slt-pdp .slt-note{font-size:13px;color:#5b5f66;margin:10px 0 0;}\n\u003c\/style\u003e\u003cdiv class=\"slt-pdp\"\u003e\n\u003cdetails open\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M245.66,66.34l-40-40A8,8,0,0,0,200,24H168a8,8,0,0,0-8,8,32,32,0,0,1-64,0,8,8,0,0,0-8-8H56a8,8,0,0,0-5.66,2.34l-40,40a8,8,0,0,0,0,11.32l24,24A8,8,0,0,0,40,104H56V208a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V104h16a8,8,0,0,0,5.66-2.34l24-24A8,8,0,0,0,245.66,66.34ZM212.69,88H192a8,8,0,0,0-8,8V208H72V96a8,8,0,0,0-8-8H43.31L27.31,72,59.31,40H80.66a48,48,0,0,0,94.68,0h21.35l32,32Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eProduct Description\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Hooded Drawstring Jacket for Cold Weather Warmth\u003c\/h2\u003e\n\u003cp\u003eCorinne is a hooded padded jacket with a flattering drawstring waist and a plush hood trim. It is designed to keep you warm while keeping a polished look on the coldest days.\u003c\/p\u003e\n\u003cp\u003eIt is made from a warm plush textile and has side snap-button pockets for convenient storage. It suits casual outings, office wear and evening events. Machine wash cold on a gentle cycle.\u003c\/p\u003e\n\u003cp\u003eSized M to 3XL.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M255.42,117l-14-35A15.93,15.93,0,0,0,226.58,72H192V64a8,8,0,0,0-8-8H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H49a32,32,0,0,0,62,0h50a32,32,0,0,0,62,0h17a16,16,0,0,0,16-16V120A7.94,7.94,0,0,0,255.42,117ZM192,88h34.58l9.6,24H192ZM32,72H176v64H32ZM80,208a16,16,0,1,1,16-16A16,16,0,0,1,80,208Zm81-24H111a32,32,0,0,0-62,0H32V152H176v12.31A32.11,32.11,0,0,0,161,184Zm31,24a16,16,0,1,1,16-16A16,16,0,0,1,192,208Zm48-24H223a32.06,32.06,0,0,0-31-24V128h48Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eShipping\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003eFree shipping on every US order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before midnight (GMT+01:00) and we start processing the same business day (Mo - Fr).\nHandling takes 1–2 business days (Mo - Fr) and transit 6–12 business days (Mo - Fr), so most orders\narrive \u003cstrong\u003e7–14 business days (Mo - Fr)\u003c\/strong\u003e after you order.\u003c\/p\u003e\n\u003cp\u003eWe ship with USPS, UPS and FedEx. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/shipping-policy\"\u003eRead the full shipping policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003e30-Day Returns\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003e\u003cstrong\u003e30 days from the day your order arrives.\u003c\/strong\u003e Most stores give you 14\n— we give you 30. Items need to be unworn, unwashed, with tags\nattached and in their original packaging.\u003c\/p\u003e\n\u003cp\u003eIf an item is faulty, damaged or simply not what you ordered, \u003cstrong\u003ewe pay\nthe return cost in full\u003c\/strong\u003e. If it is a change of mind or the size is not\nright, you cover the return postage.\u003c\/p\u003e\n\u003cp\u003eEmail \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e with your order\nnumber first — the return address is issued per return, so please wait for\nit before posting anything back.\u003c\/p\u003e\n\u003cp\u003eRefunds reach your original payment method \u003cstrong\u003ewithin 14 days\u003c\/strong\u003e of\nthe return arriving and being checked.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/policies\/refund-policy\"\u003eRead the full return policy\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 256 256\" width=\"20\" height=\"20\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eBuy more, save more\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eStock up and the discount grows. Applied automatically at checkout.\u003c\/p\u003e\n\u003cp\u003eBuy 2, get \u003cstrong\u003e10% extra discount\u003c\/strong\u003e\u003cbr\u003eBuy 3, get \u003cstrong\u003e15% extra\ndiscount\u003c\/strong\u003e\u003cbr\u003eBuy 4, get \u003cstrong\u003e20% extra discount\u003c\/strong\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003cstyle\u003e.slt-bb{--ink:#16181C;--ash:#C2C4C7;--indigo:#2B3A4F;--chalk:#EDEDEA;\n  --ox:#7A2E33;font-family:'Archivo','Jost',system-ui,sans-serif;\n  color:var(--ink);}\n.slt-bb *{box-sizing:border-box;}\n\n\/* 1 - price line ------------------------------------------------------- *\/\n.slt-price{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;\n  margin:0 0 14px;}\n.slt-price__now{font-size:26px;font-weight:600;color:var(--ox);\n  letter-spacing:-.01em;line-height:1;}\n.slt-price__was{font-size:16px;color:#7c8085;text-decoration:line-through;\n  text-decoration-thickness:1px;line-height:1;}\n.slt-price__save{font-size:12.5px;font-weight:700;letter-spacing:.04em;\n  text-transform:uppercase;color:#fff;background:var(--ox);\n  border-radius:3px;padding:5px 9px;line-height:1;}\n\n\/* 2 - trust row -------------------------------------------------------- *\/\n\/* No chalk panel and no padding box - the USPs sit straight on the page (Ole,\n   2026-08-31). Spacing is carried by margin alone so nothing draws a shape. *\/\n.slt-trust{display:flex;flex-direction:column;gap:8px;margin:0;\n  padding:0;background:none;border:0;border-radius:0;}\n.slt-trust__i{display:flex;align-items:center;gap:10px;font-size:13.5px;\n  line-height:1.4;}\n.slt-trust__i svg{flex:0 0 auto;color:var(--indigo);}\n.slt-trust__i b{font-weight:600;}\n\n\/* 3 - fit block -------------------------------------------------------- *\/\n.slt-fit{margin:0 0 14px;padding:14px 15px;border:1px solid var(--ash);\n  border-radius:14px;}\n.slt-fit__h{display:flex;align-items:center;gap:8px;font-size:12px;\n  font-weight:600;letter-spacing:.12em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 8px;}\n.slt-fit__h .slt-fit__lbl{flex:1 1 auto;}\n.slt-fit__link{flex:0 0 auto;font-size:11.5px;font-weight:600;\n  letter-spacing:.06em;color:var(--indigo);text-decoration:underline;\n  text-underline-offset:3px;cursor:pointer;}\n.slt-fit__link:hover{color:var(--ox);}\n.slt-fit__v{font-size:15px;font-weight:600;margin:0 0 2px;}\n.slt-fit__a{font-size:13.5px;color:#5b5f66;margin:0 0 12px;}\n.slt-fit__track{position:relative;height:3px;border-radius:2px;\n  background:linear-gradient(90deg,var(--ash),var(--indigo),var(--ash));\n  margin:0 0 7px;}\n.slt-fit__dot{position:absolute;top:50%;width:13px;height:13px;\n  border-radius:50%;background:var(--indigo);border:2.5px solid #fff;\n  box-shadow:0 0 0 1px var(--ash);transform:translate(-50%,-50%);}\n.slt-fit__scale{display:flex;justify-content:space-between;font-size:11.5px;\n  color:#7c8085;}\n.slt-fit__scale span:nth-child(2){text-align:center;}\n.slt-fit__scale span:last-child{text-align:right;}\n.slt-fit__on{color:var(--ink);font-weight:600;}\n.slt-fit__none{font-size:13.5px;color:#5b5f66;margin:0;}\n\n\/* 4 - CTA -------------------------------------------------------------- *\/\n.slt-bb .slt-cta,\n.slt-bb button[type=submit],\n.slt-bb .button{display:block;width:100%;border:0;cursor:pointer;\n  background:var(--indigo);color:#fff;border-radius:14px;\n  padding:16px 20px;font-family:inherit;font-size:15px;font-weight:600;\n  letter-spacing:.02em;transition:background .15s ease;}\n.slt-bb .slt-cta:hover{background:#22303f;}\n\n\/* Shopify's dynamic checkout button. Ole wants Add to cart only, and the\n   theme's own \"hide dynamic checkout\" toggle does not exist on every section,\n   so it is closed off in CSS too. *\/\n.slt-bb .shopify-payment-button,\n.slt-bb .shopify-payment-button__button,\n.slt-bb .slt-cta--alt{display:none !important;}\n\n\/* 5 - payment icons ---------------------------------------------------- *\/\n.slt-pay{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;\n  margin:13px 0 0;}\n.slt-pay svg{display:block;border-radius:4px;}\n\n\/* 6 - size dropdown ---------------------------------------------------- *\/\n.slt-size__wrap{margin:0 0 16px;}\n.slt-size__lbl{display:block;font-size:12px;font-weight:600;\n  letter-spacing:.1em;text-transform:uppercase;color:var(--indigo);\n  margin:0 0 7px;}\n.slt-size{display:block;width:100%;appearance:none;-webkit-appearance:none;\n  font-family:inherit;font-size:15px;color:var(--ink);background:#fff;\n  border:1px solid var(--ash);border-radius:14px;padding:13px 40px 13px 15px;\n  cursor:pointer;line-height:1.2;\n  background-image:url(\"data:image\/svg+xml;charset=utf8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%232B3A4F' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n  background-repeat:no-repeat;background-position:right 14px center;\n  background-size:17px 17px;}\n.slt-size:focus{outline:none;border-color:var(--indigo);\n  box-shadow:0 0 0 2px rgba(43,58,79,.14);}\n\n\/* 7 - colour swatches --------------------------------------------------- *\/\n.slt-sw__wrap{margin:0 0 16px;}\n.slt-sw__lbl{display:flex;gap:7px;align-items:baseline;font-size:12px;\n  font-weight:600;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--indigo);margin:0 0 9px;}\n.slt-sw__name{font-weight:400;letter-spacing:.02em;text-transform:none;\n  font-size:13.5px;color:var(--ink);}\n.slt-sw{display:flex;flex-wrap:wrap;gap:9px;}\n.slt-sw__i{width:34px;height:34px;padding:0;border-radius:50%;cursor:pointer;\n  border:1px solid var(--ash);background-size:cover;background-position:center;\n  background-repeat:no-repeat;box-shadow:0 0 0 0 var(--indigo);\n  transition:box-shadow .14s ease,border-color .14s ease;}\n.slt-sw__i:hover{border-color:var(--indigo);}\n.slt-sw__i.is-on{border-color:#fff;box-shadow:0 0 0 2px var(--indigo);}\n.slt-sw__i--out{opacity:.35;}\n.slt-sw__i--out::after{content:\"\";display:block;width:100%;height:100%;\n  border-radius:50%;background:linear-gradient(45deg,transparent 46%,\n  var(--ink) 46%,var(--ink) 54%,transparent 54%);}\n\n\/* the source block is inert until its pieces have been relocated *\/\n.slt-src{display:none !important;}\n.slt-hide{display:none !important;}\n.slt-noline{border-bottom:0 !important;}\n.slt-flush{margin:0;}\n.slt-nomb{margin-bottom:2px !important;padding-bottom:0 !important;}\n.slt-nomt{margin-top:4px !important;padding-top:0 !important;}\n.slt-src [data-slt]{display:block;}\n\n\/* the theme's own price nodes, tagged by the injector - no class guessing *\/\n.slt-now{color:#7A2E33 !important;}\n.slt-was{color:#7c8085 !important;text-decoration:line-through !important;}\n\n\/* Add to cart: OLENOVA teal #0F6B5F since 2026-10-21 (was Indigo), radius 14, never a\n   pill. Buy it now is hidden. The live colour is forced by slt-nav-accent.liquid\n   (solteri_nav_accent.py ATC_CSS); descriptions built before that still say Indigo. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#0F6B5F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"66.99\" data-was=\"\" data-sizes='[\"M\",\"L\",\"XL\",\"2XL\",\"3XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amelia-elegant-winter-puffer-jacket-for-women_f1_studio.jpg?v=1793709801\u0026amp;width=96\"},{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amelia-elegant-winter-puffer-jacket-for-women_c_brown_studio.jpg?v=1793709801\u0026amp;width=96\"},{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amelia-elegant-winter-puffer-jacket-for-women_c_khaki_studio.jpg?v=1793709801\u0026amp;width=96\"},{\"v\":\"White\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amelia-elegant-winter-puffer-jacket-for-women_c_white_studio.jpg?v=1793709801\u0026amp;width=96\"}],\"tier\":\"photo\"}'\u003e\n\u003cdiv data-slt=\"trust\"\u003e\u003cdiv class=\"slt-trust\"\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l9 4.5-9 4.5-9-4.5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 12l9 4.5 9-4.5\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 16.5L12 21l9-4.5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003eBuy 2, save 10%\u003c\/b\u003e — buy 3, save 15% — buy 4, save 20%\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3l7.5 3v6c0 4.4-3.1 7.7-7.5 9-4.4-1.3-7.5-4.6-7.5-9V6z\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003e30-day money-back guarantee\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"slt-trust__i\"\u003e\n\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\u003cpath d=\"M20 4c0 8-5 13-12 13H4c0-8 5-13 12-13z\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 20c3-5 7-8 12-9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cb\u003ePremium quality fabrics\u003c\/b\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"fit\"\u003e\u003c\/div\u003e\n\u003cdiv data-slt=\"pay\"\u003e\u003cdiv class=\"slt-pay\"\u003e\n\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-visa\"\u003e\u003ctitle id=\"pi-visa\"\u003eVisa\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#142FBD\" style=\"fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#1532CB\" style=\"fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778 16.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-master\"\u003e\u003ctitle id=\"pi-master\"\u003eMastercard\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#1C1C1C\" style=\"fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z\" fill=\"#232323\" style=\"fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z\" fill=\"#EB001B\" style=\"fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z\" fill=\"#F79E1B\" style=\"fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z\" fill=\"#FF5F00\" style=\"fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" fill=\"none\" aria-labelledby=\"pi-american_express\"\u003e\u003ctitle id=\"pi-american_express\"\u003eAmerican Express\u003c\/title\u003e\n\u003crect x=\".5\" y=\".5\" rx=\"2.5\" stroke=\"#000\" stroke-opacity=\".07\" fill=\"none\"\u003e\u003c\/rect\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z\" fill=\"#0071CE\" style=\"fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z\" stroke=\"black\" stroke-opacity=\"0.07\" style=\"stroke:black;stroke-opacity:0.07;\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z\" fill=\"white\" style=\"fill:white;fill-opacity:1;\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-maestro\"\u003e\u003ctitle id=\"pi-maestro\"\u003eMaestro\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003ccircle fill=\"#EB001B\" cx=\"15\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003ccircle fill=\"#00A2E5\" cx=\"23\" cy=\"12\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath fill=\"#7375CF\" d=\"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" role=\"img\" aria-labelledby=\"pi-discover\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-discover\"\u003eDiscover\u003c\/title\u003e\n\u003cpath fill=\"#000\" opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z\" fill=\"#fff\"\u003e\u003c\/path\u003e\u003cpath d=\"M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint0_linear)\"\u003e\u003c\/path\u003e\u003cpath opacity=\".65\" d=\"M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z\" fill=\"url(#pi-paint1_linear)\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z\" fill=\"#231F20\"\u003e\u003c\/path\u003e\u003cpath d=\"M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z\" fill=\"#F48120\"\u003e\u003c\/path\u003e\u003cdefs\u003e\u003clineargradient id=\"pi-paint0_linear\" x1=\"21.657\" y1=\"12.275\" x2=\"19.632\" y2=\"9.104\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F89F20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".25\" stop-color=\"#F79A20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".533\" stop-color=\"#F68D20\"\u003e\u003c\/stop\u003e\u003cstop offset=\".62\" stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".723\" stop-color=\"#F48120\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#F37521\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003clineargradient id=\"pi-paint1_linear\" x1=\"21.338\" y1=\"12.232\" x2=\"18.378\" y2=\"6.446\" gradientunits=\"userSpaceOnUse\"\u003e\u003cstop stop-color=\"#F58720\"\u003e\u003c\/stop\u003e\u003cstop offset=\".359\" stop-color=\"#E16F27\"\u003e\u003c\/stop\u003e\u003cstop offset=\".703\" stop-color=\"#D4602C\"\u003e\u003c\/stop\u003e\u003cstop offset=\".982\" stop-color=\"#D05B2E\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\u003c\/defs\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-diners_club\"\u003e\u003ctitle id=\"pi-diners_club\"\u003eDiners Club\u003c\/title\u003e\n\u003cpath opacity=\".07\" d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\"\u003e\u003c\/path\u003e\u003cpath d=\"M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z\" fill=\"#3086C8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" role=\"img\" aria-labelledby=\"pi-jcb\" viewbox=\"0 0 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003ctitle id=\"pi-jcb\"\u003eJCB\u003c\/title\u003e\n\u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e\u003cg fill-rule=\"nonzero\"\u003e\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cpath d=\"M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z\" fill=\"#006EBC\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z\" fill=\"#F00036\"\u003e\u003c\/path\u003e\u003cpath d=\"M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z\" fill=\"#2AB419\"\u003e\u003c\/path\u003e\u003cpath d=\"M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z\" fill=\"#FFF\" fill-rule=\"nonzero\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" viewbox=\"-36 25 38 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-labelledby=\"pi-unionpay\"\u003e\u003ctitle id=\"pi-unionpay\"\u003eUnion Pay\u003c\/title\u003e\n\u003cpath fill=\"#005B9A\" d=\"M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#E9292D\" d=\"M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#0E73B9\" d=\"M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#059DA4\" d=\"M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#fff\" d=\"M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" x=\"0\" y=\"0\" viewbox=\"0 0 165.521 105.965\" xml:space=\"preserve\" aria-labelledby=\"pi-apple_pay\"\u003e\u003ctitle id=\"pi-apple_pay\"\u003eApple Pay\u003c\/title\u003e\n\u003cpath fill=\"#000\" d=\"M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#FFF\" d=\"M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875\"\u003e\u003c\/path\u003e\u003cg\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003cg\u003e\u003cpath fill=\"#000\" d=\"M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z\"\u003e\u003c\/path\u003e\u003cpath fill=\"#000\" d=\"M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003csvg width=\"36\" height=\"23\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" viewbox=\"0 0 38 24\" aria-labelledby=\"pi-google_pay\"\u003e\u003ctitle id=\"pi-google_pay\"\u003eGoogle Pay\u003c\/title\u003e\n\u003cpath d=\"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z\" fill=\"#000\" opacity=\".07\"\u003e\u003c\/path\u003e\u003cpath d=\"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32\" fill=\"#FFF\"\u003e\u003c\/path\u003e\u003cpath d=\"M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.06zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z\" fill=\"#5F6368\"\u003e\u003c\/path\u003e\u003cpath d=\"M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z\" fill=\"#4285F4\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z\" fill=\"#34A853\"\u003e\u003c\/path\u003e\u003cpath d=\"M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z\" fill=\"#FBBC04\"\u003e\u003c\/path\u003e\u003cpath d=\"M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z\" fill=\"#EA4335\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(function(){\n  \/\/ Applied inline, so they reach the price even inside a shadow root.\n  var PRICE_NOW = '#7A2E33';   \/\/ current price - the brand red\n  var PRICE_WAS = '#7c8085';  \/\/ struck compare-at - grey\n\n  \/\/ The ADD TO CART BUTTON is the anchor, not the form. Two reasons, both found\n  \/\/ by testing against a real Shopify product page rather than assuming:\n  \/\/   * a page carries several form[action*=\"\/cart\/add\"] (every related-product\n  \/\/     quick-add is one), and querySelector picks whichever comes first - which\n  \/\/     was a related product, whose form holds nothing but hidden inputs;\n  \/\/   * in the Dawn family the real button is not inside that form at all, it is\n  \/\/     associated to it by a `form` attribute.\n  \/\/ `button[name=add]` is the one stable handle across Shopify themes.\n  function findBtn(){\n    var c = document.querySelector('button[name=add], .product-form__submit');\n    if (c) return c;\n    var all = document.querySelectorAll('button, input[type=submit]');\n    for (var i = 0; i \u003c all.length; i++) {\n      var e = all[i];\n      var s = ((e.textContent || '') + ' ' + (e.value || '')).toLowerCase();\n      if (\/add to (cart|bag)\/.test(s)) return e;\n    }\n    return null;\n  }\n\n  function place(){\n    var src = document.querySelector('.slt-src');\n    if (!src || src.dataset.done) return;\n    var btn = findBtn();\n    if (!btn) return;\n    var form = btn.closest('form') ||\n               document.getElementById(btn.getAttribute('form') || '') ||\n               btn.parentNode;\n    src.dataset.done = '1';\n\n    var grab = function(k){ return src.querySelector('[data-slt=\"'+k+'\"]'); };\n    var wrap = function(node){\n      var d = document.createElement('div'); d.className = 'slt-bb';\n      d.appendChild(node); return d;\n    };\n\n    \/\/ Price first, because the trust row is anchored to it. No theme class is\n    \/\/ assumed: find the smallest elements inside the product's own container\n    \/\/ whose text is the price \/ the compare-at price, tag them, and let the CSS\n    \/\/ colour them. Then drop the SAVE badge in.\n    var scope = btn.closest('product-info, .product__info-wrapper, .product, '\n                            + 'section, main') || document.body;\n    \/\/ A theme renders the price more than once - a hidden duplicate for the\n    \/\/ sticky bar, a template node, a structured-data block. Matching on text\n    \/\/ alone tagged one of those INVISIBLE copies, so the price never changed\n    \/\/ colour and the trust row anchored to a node with a zero-size rect. Every\n    \/\/ candidate must therefore be on screen before it counts.\n    \/\/ offsetParent is null for anything inside a position:fixed ancestor and for\n    \/\/ display:contents wrappers, both of which are perfectly visible - so it is\n    \/\/ not usable on its own. Rects plus computed visibility are.\n    var shown = function(e){\n      if (!e) return false;\n      if (!e.getClientRects || e.getClientRects().length === 0) return false;\n      var r = e.getBoundingClientRect();\n      if (!(r.height \u003e 0 \u0026\u0026 r.width \u003e 0)) return false;\n      var cs = getComputedStyle(e);\n      return cs.visibility !== 'hidden' \u0026\u0026 cs.display !== 'none'\n             \u0026\u0026 cs.opacity !== '0';\n    };\n    \/\/ Searched with deepAll, not scope.querySelectorAll: Horizon renders the\n    \/\/ price inside a web component, so a light-DOM-only search never found it.\n    \/\/ And the colour is applied INLINE rather than by class, because a class\n    \/\/ plus an external stylesheet does nothing across a shadow boundary - the\n    \/\/ same reason the theme's own variant buttons would not hide.\n    \/\/ Compare DIGITS ONLY. The store's single market is the Netherlands, so the\n    \/\/ storefront can format GBP the Dutch way - \"£79,99\" - while we ship\n    \/\/ \"79.99\". Matching the punctuation made the price unfindable and nothing\n    \/\/ was ever recoloured. Stripping to digits makes the match locale-proof:\n    \/\/ 79.99 and 79,99 are both \"7999\".\n    var digits = function(x){ return String(x == null ? '' : x).replace(\/[^0-9]\/g, ''); };\n\n    \/\/ Prices are compared as NUMBERS, not as text or digit strings. Proven\n    \/\/ necessary against a real Horizon store: the product costs 233.00 and the\n    \/\/ theme prints \"$233\" - Shopify drops the decimals when the currency format\n    \/\/ says so - so a digit-string match on \"23300\" found nothing at all. The\n    \/\/ same comparison also has to survive \"£41,99\" (this store's only market is\n    \/\/ the Netherlands) and thousands separators like \"1,234.56\" \/ \"1.234,56\".\n    var numsIn = function(text){\n      var out = [], re = \/\\d[\\d.,]*\/g, m;\n      while ((m = re.exec(String(text || '')))) {\n        var s = m[0];\n        var dec = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\n        var tail = dec \u003e= 0 ? s.length - dec - 1 : -1;\n        var whole, frac;\n        if (tail === 1 || tail === 2) {          \/\/ that separator is decimal\n          whole = s.slice(0, dec).replace(\/[.,]\/g, '');\n          frac  = s.slice(dec + 1);\n        } else {                                  \/\/ all separators are thousands\n          whole = s.replace(\/[.,]\/g, '');\n          frac  = '';\n        }\n        var v = parseFloat(whole + (frac ? '.' + frac : ''));\n        if (!isNaN(v)) out.push(v);\n      }\n      return out;\n    };\n    var hasNum = function(text, target){\n      var ns = numsIn(text);\n      for (var i = 0; i \u003c ns.length; i++) {\n        if (Math.abs(ns[i] - target) \u003c 0.005) return true;\n      }\n      return false;\n    };\n\n    \/\/ `shown()` demands a layout box, and a custom element styled\n    \/\/ `display: contents` - which is exactly how Horizon wraps a price in\n    \/\/ \u003csale-price\u003e \/ \u003ccompare-at-price\u003e - generates NO box at all. Its rects are\n    \/\/ empty and offsetParent is null even though the number is plainly on\n    \/\/ screen, so every price candidate was being filtered out and nothing was\n    \/\/ ever recoloured. For text we only need \"is this actually rendered\", so\n    \/\/ walk the ancestors (out through shadow hosts) looking for a real reason\n    \/\/ it would be invisible, and ignore whether it has a box of its own.\n    var isRendered = function(e){\n      if (!e || (e.isConnected === false)) return false;\n      var n = e, guard = 0;\n      while (n \u0026\u0026 n.nodeType === 1 \u0026\u0026 guard++ \u003c 60) {\n        var cs;\n        try { cs = getComputedStyle(n); } catch (x) { return false; }\n        if (!cs) return false;\n        if (cs.display === 'none' || cs.visibility === 'hidden'\n            || cs.opacity === '0') return false;\n        if (n.parentElement) { n = n.parentElement; continue; }\n        var rt = n.getRootNode ? n.getRootNode() : null;\n        n = (rt \u0026\u0026 rt.host) ? rt.host : null;      \/\/ step out of a shadow root\n      }\n      return true;\n    };\n\n    \/\/ A price wrapped in a display:contents custom element (Horizon's\n    \/\/ \u003csale-price\u003e) has NO box of its own, so getBoundingClientRect() returns\n    \/\/ all zeroes and every position test built on it silently compared against\n    \/\/ the top of the page. Range-measure the element's contents instead - that\n    \/\/ gives the rectangle the shopper actually sees.\n    var rectOf = function(e){\n      var r = e.getBoundingClientRect();\n      if (r.width \u003e 0 || r.height \u003e 0) return r;\n      try {\n        var rg = document.createRange();\n        rg.selectNodeContents(e);\n        return rg.getBoundingClientRect();\n      } catch (x) { return r; }\n    };\n\n    \/\/ The product area, resolved from the buy button. Prices outside it - the\n    \/\/ sticky bar, related products, a mini-cart - must never be picked.\n    var priceScope = btn.closest('product-info, .product__info-wrapper, .product, '\n                                 + 'section, main') || document.body;\n    \/\/ The product title anchors the price: on every PDP the price sits directly\n    \/\/ beneath it, which separates the real price from any duplicate elsewhere.\n    var titleEl = priceScope.querySelector('h1') || document.querySelector('h1');\n    var titleBottom = titleEl ? titleEl.getBoundingClientRect().bottom : 0;\n\n    \/\/ Do NOT require a leaf node. Horizon renders a price as\n    \/\/   \u003csale-price\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\u003c\/span\u003e£79.99\u003c\/sale-price\u003e\n    \/\/ so the element holding the price HAS a child, and a \"deepest node only\"\n    \/\/ rule skipped it and matched nothing. Instead: take every visible element\n    \/\/ whose digits equal the price, and keep the SMALLEST one - that is the\n    \/\/ tightest wrapper around the number, whatever the markup.\n    var mark = function(txt, css){\n      var target = parseFloat(String(txt || '').replace(\/,\/g, '.'));\n      if (isNaN(target)) return null;\n      var all = deepAll('*');\n      var best = null, bestScore = 1e9;\n      for (var i = 0; i \u003c all.length; i++) {\n        var e = all[i];\n        var tag = e.tagName;\n        if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT') continue;\n        if (e.closest \u0026\u0026 e.closest('.slt-bb, .slt-src')) continue;  \/\/ not our own\n        \/\/ isRendered, NOT shown(): shown() demands a layout box, and Horizon\n        \/\/ wraps the price in \u003csale-price\u003e\/\u003ccompare-at-price\u003e, both\n        \/\/ display:contents - no box, no rects, so every real candidate was\n        \/\/ being thrown away and the price was never recoloured. That is the\n        \/\/ bug Ole saw: black price, no SAVE badge, on a page where every other\n        \/\/ injected block had landed. isRendered only asks whether the number is\n        \/\/ actually on screen, which is the real question here.\n        if (!isRendered(e)) continue;\n        var t = e.textContent || '';\n        \/\/ HARD SANITY GUARD. A price sits in a small node. Without this the\n        \/\/ match walked up to \u003cbody\u003e - whose text of course contains the price,\n        \/\/ via the JSON-LD block among other things - and painting it plus every\n        \/\/ descendant turned 885 elements red. Anything large, or anything that\n        \/\/ owns the buy button, cannot be a price.\n        \/\/ Measure the text with whitespace COLLAPSED, and leave room for the\n        \/\/ theme's screen-reader label. solteri2's Horizon renders the price as\n        \/\/   \u003cspan class=\"price\"\u003e\u003cspan class=\"visually-hidden\"\u003eSale price\n        \/\/   \u003c\/span\u003e [newline + 10 spaces] £79.99 [newline + 8 spaces] \u003c\/span\u003e\n        \/\/ which is 48 raw characters, so a 40-character cap on the RAW text\n        \/\/ threw the real price away on every single product. That is why the\n        \/\/ price stayed black after the display:contents fix: two different\n        \/\/ guards were each killing it, and the demo store - whose price span\n        \/\/ is a bare \"$233.00\" - could not show it.\n        var tc = t.replace(\/\\s+\/g, ' ').trim();\n        if (tc.length \u003e 60) continue;\n        if (e.getElementsByTagName('*').length \u003e 6) continue;\n        if (tag === 'BODY' || tag === 'MAIN' || tag === 'HEADER'\n            || tag === 'FOOTER' || tag === 'HTML') continue;\n        if (btn \u0026\u0026 e.contains(btn)) continue;\n        if (!hasNum(t, target)) continue;\n        \/\/ The tightest node wins: fewest descendants, then fewest other numbers\n        \/\/ in its text, so a wrapper holding both the price and the compare-at\n        \/\/ never beats the element holding just the price.\n        \/\/ Horizon ships a \u003csticky-add-to-cart\u003e bar carrying a SECOND copy of the\n        \/\/ price. It is inside \u003cmain\u003e and passes every other test, so it won the\n        \/\/ match and the visible price stayed black. Anything in a sticky or\n        \/\/ fixed container is not the price the shopper is reading.\n        \/\/ Reject the sticky bar's copy of the price - but ONLY that. The first\n        \/\/ version rejected any ancestor with position:sticky, and on the real\n        \/\/ Horizon theme the WHOLE product-info column is position:sticky, so\n        \/\/ every genuine candidate was thrown out and the price was never found\n        \/\/ (proven on theme-horizon-demo.myshopify.com: 17 visible candidates,\n        \/\/ zero matches). position:fixed and the bar's own component names are\n        \/\/ what actually identify a duplicate.\n        var anc = e, sticky = false, hops = 0;\n        while (anc \u0026\u0026 hops++ \u003c 12) {\n          var tn = (anc.tagName || '').toLowerCase();\n          var cn = (anc.className || '').toString().toLowerCase();\n          if (tn === 'sticky-add-to-cart' || tn === 'quick-add-component'\n              || \/sticky-add-to-cart|quick-add|cart-drawer|modal\/.test(cn)) {\n            sticky = true; break;\n          }\n          var ps;\n          try { ps = getComputedStyle(anc).position; } catch (x) { ps = ''; }\n          if (ps === 'fixed') { sticky = true; break; }\n          anc = anc.parentElement || (anc.getRootNode \u0026\u0026 anc.getRootNode().host) || null;\n        }\n        if (sticky) continue;\n\n        var score = e.getElementsByTagName('*').length * 10 + numsIn(t).length;\n        if (!priceScope || !priceScope.contains(e)) score += 100000;\n        \/\/ the real price sits just under the product title\n        if (titleEl) {\n          score += Math.min(400,\n            Math.abs(rectOf(e).top - titleBottom) \/ 4);\n        }\n        if (score \u003c bestScore) { bestScore = score; best = e; }\n      }\n      if (best) {\n        try { best.setAttribute(css['text-decoration-line'] ? 'data-slt-was'\n                                                            : 'data-slt-now', '1'); } catch (e3) {}\n        var targets = [best];\n        var kids = best.getElementsByTagName('*');\n        for (var j = 0; j \u003c kids.length; j++) targets.push(kids[j]);\n        \/\/ paint the wrapper AND its descendants: a child span carrying its own\n        \/\/ colour would otherwise ignore a colour set only on the parent\n        for (var t2 = 0; t2 \u003c targets.length; t2++) {\n          for (var k in css) {\n            try { targets[t2].style.setProperty(k, css[k], 'important'); } catch (e2) {}\n          }\n        }\n      }\n      return best;\n    };\n    \/\/ The badge is kept as MARKUP, not as the node itself: the theme rebuilds\n    \/\/ the whole buy box on every variant change and deletes whatever we put\n    \/\/ inside it, so a repaint has to be able to build a fresh one.\n    var saveNode = grab('save');\n    var saveHTML = saveNode ? saveNode.outerHTML : '';\n\n    var paint = function(){\n      var nowEl = mark(src.dataset.now, {'color': PRICE_NOW,\n                                   'font-weight': '700'});\n      \/\/ Never strike the price through. When the compare-at shipped equal to\n      \/\/ the price - which is what a stale prices.json produces - both marks\n      \/\/ matched the SAME element and the current price came out grey with a\n      \/\/ line through it. A compare-at that is not strictly higher is not a\n      \/\/ compare-at.\n      var was2 = null;\n      if (src.dataset.was \u0026\u0026 parseFloat(String(src.dataset.was).replace(\/,\/g, '.'))\n            \u003e parseFloat(String(src.dataset.now).replace(\/,\/g, '.')) + 0.004) {\n        was2 = mark(src.dataset.was, {'color': PRICE_WAS,\n                                      'text-decoration-line': 'line-through'});\n      }\n      \/\/ .slt-shown, not .slt-price__save: the SOURCE badge is itself a\n      \/\/ .slt-price__save sitting hidden in .slt-src, so the plain class\n      \/\/ check always found one and the badge was never placed.\n      if (nowEl \u0026\u0026 saveHTML \u0026\u0026 !deepAll('.slt-price__save.slt-shown').length) {\n        var holder = document.createElement('span');\n        holder.innerHTML = saveHTML;\n        var badge = holder.firstChild;\n        if (badge) {\n          nowEl.parentNode.appendChild(badge);\n          badge.classList.add('slt-shown');\n        }\n      }\n      return [nowEl, was2];\n    };\n    window.__sltPaint = paint;\n    var painted = paint();\n    var now = painted[0], wasEl = painted[1];\n    \/\/ reported back so a miss can be read off the page instead of guessed at\n    document.documentElement.setAttribute('data-slt-price',\n      (now ? 'now' : '-') + '\/' + (wasEl ? 'was' : '-')\n      + ' want=' + digits(src.dataset.now) + ',' + digits(src.dataset.was)\n      + ' scope=' + (priceScope ? (priceScope.tagName || '?').toLowerCase() : 'none')\n      + ' cands=' + (function(){\n          var tv = parseFloat(String(src.dataset.now || '').replace(\/,\/g, '.'));\n          var n = 0, all = deepAll('*');\n          for (var i = 0; i \u003c all.length; i++) {\n            if (shown(all[i]) \u0026\u0026 hasNum(all[i].textContent, tv)) n++;\n          }\n          return n;\n        })());\n    \/\/ Trust row sits DIRECTLY BELOW THE PRICE. Anchor: walk up from the price\n    \/\/ node to the block that owns the whole price line, and insert after it.\n    \/\/ Falls back to above Add to cart if the price was not found, so the row\n    \/\/ always lands somewhere sensible rather than vanishing.\n    \/\/ Four layered anchors, most precise first. The text match alone was not\n    \/\/ enough: it depends on the theme rendering the exact number we shipped,\n    \/\/ and when it missed the row silently fell all the way back to sitting\n    \/\/ above Add to cart - which is where Ole found it.\n    var priceEl = now;\n    if (!priceEl) {\n      \/\/ 2. any element whose class mentions price and which contains a number\n      var cands = scope.querySelectorAll('[class*=\"price\" i], [class*=\"Price\"]');\n      for (var c = 0; c \u003c cands.length; c++) {\n        if (shown(cands[c]) \u0026\u0026 \/\\d\/.test(cands[c].textContent || '')) {\n          priceEl = cands[c]; break;\n        }\n      }\n    }\n    if (!priceEl) {\n      \/\/ 3. the currency symbol, in the smallest node that carries it\n      var all2 = scope.querySelectorAll('span, div, p, strong');\n      for (var a2 = 0; a2 \u003c all2.length; a2++) {\n        var e2 = all2[a2];\n        if (e2.children.length || !shown(e2)) continue;\n        if (\/[£$€]\\s?\\d\/.test(e2.textContent || '')) { priceEl = e2; break; }\n      }\n    }\n\n    \/\/ Only a price element that is actually VISIBLE and actually sits ABOVE the\n    \/\/ Add to cart button can be the anchor. Without these two tests the first\n    \/\/ [class*=price] match wins, and on a real theme that is often a hidden\n    \/\/ node - a sticky bar price, a unit price, a structured-data block - so the\n    \/\/ row lands next to something the shopper cannot see. That is why this has\n    \/\/ now been reported three times.\n    var usable = function(e){\n      if (!e || e.offsetParent === null) return false;\n      var r = e.getBoundingClientRect();\n      if (!r.height) return false;\n      return r.top \u003c btn.getBoundingClientRect().top;\n    };\n    if (!usable(priceEl)) priceEl = null;\n\n    var t = grab('trust');\n    if (t) {\n      var where = null, node = wrap(t);\n\n      \/\/ ANCHOR 1 - immediately before the variant picker. \"After the price\" and\n      \/\/ \"before the size\/colour picker\" are the same slot on a Shopify PDP, and\n      \/\/ the picker is far easier to identify than a price. So this is now the\n      \/\/ primary anchor rather than the last resort.\n      var vp = null;\n      var vps = scope.querySelectorAll(\n        'variant-selects, variant-picker, product-variant-picker, '\n        + '.product-form__input, [class*=\"variant-picker\"], [class*=\"variant-selects\"]');\n      for (var v = 0; v \u003c vps.length; v++) {\n        if (usable(vps[v])) { vp = vps[v]; break; }\n      }\n      if (vp \u0026\u0026 vp.parentNode) {\n        vp.parentNode.insertBefore(node, vp);\n        where = 'before-variant-picker';\n      }\n\n      \/\/ ANCHOR 2 - straight after the visible price block.\n      if (!where \u0026\u0026 priceEl) {\n        var anchorEl = priceEl;\n        for (var k = 0; k \u003c 4 \u0026\u0026 anchorEl.parentNode \u0026\u0026\n                        anchorEl.parentNode !== scope; k++) {\n          anchorEl = anchorEl.parentNode;\n        }\n        if (anchorEl.parentNode) {\n          anchorEl.parentNode.insertBefore(node, anchorEl.nextSibling);\n          where = 'after-price';\n        }\n      }\n\n      \/\/ ANCHOR 3 - last resort, above Add to cart.\n      if (!where) {\n        btn.parentNode.insertBefore(node, btn);\n        where = 'fallback:above-atc';\n      }\n      document.documentElement.setAttribute('data-slt-trust', where);\n\n      \/\/ Kill the theme's divider between the price and the USP block. It comes\n      \/\/ in two shapes: a real \u003chr\u003e\/divider element sitting just above us, or a\n      \/\/ border-bottom drawn on the price block itself. Only the ONE element\n      \/\/ directly above the row is touched, so dividers elsewhere on the page\n      \/\/ are left alone.\n      var prev = node.previousElementSibling;\n      if (prev) {\n        var pc = (prev.className || '').toString().toLowerCase();\n        if (prev.tagName === 'HR' || \/divider|separator|rule|border\/.test(pc)) {\n          prev.classList.add('slt-hide');\n        } else {\n          var cs = getComputedStyle(prev);\n          if (parseFloat(cs.borderBottomWidth) \u003e 0) prev.classList.add('slt-noline');\n        }\n      }\n\n      \/\/ Close the gap on BOTH sides. Most of it is not ours - it is the theme's\n      \/\/ own bottom margin on the price block and top margin on the variant\n      \/\/ picker - so zeroing our own margin alone leaves the space in place.\n      \/\/ Only the two immediate neighbours are touched.\n      node.classList.add('slt-flush');\n      if (prev) prev.classList.add('slt-nomb');\n      var next = node.nextElementSibling;\n      if (next) next.classList.add('slt-nomt');\n\n      \/\/ Halve the space between the PRICE and the USP list (Ole, 2026-08-31).\n      \/\/ Measured from the visible price element, not from `prev`: on some\n      \/\/ themes the element we insert after is a wrapper whose own padding IS\n      \/\/ the gap, so prev.bottom already sits below the space and measuring\n      \/\/ against it would report nothing to cut. The price node is what the\n      \/\/ shopper actually sees the space beneath.\n    }\n\n    \/\/ Fit block stays directly above Add to cart.\n    var f = grab('fit');\n    if (f) btn.parentNode.insertBefore(wrap(f), btn);\n\n    \/\/ payment icons, below the button (and below the dynamic checkout slot)\n    var pay = grab('pay');\n    if (pay) {\n      var box = btn.parentNode;\n      var dyn = box.querySelector \u0026\u0026 box.querySelector('.shopify-payment-button');\n      var anchor = dyn || btn;\n      anchor.parentNode.insertBefore(wrap(pay), anchor.nextSibling);\n    }\n\n    \/\/ SIZE AS A DROPDOWN (Ole, 2026-09-01).\n    \/\/\n    \/\/ The theme's own radios are NOT replaced - they are kept in the DOM and\n    \/\/ driven from the \u003cselect\u003e. That matters: the variant id, price, stock\n    \/\/ state and the add-to-cart payload are all produced by the theme's variant\n    \/\/ logic listening to those inputs. Building a select that sets the variant\n    \/\/ itself would be the one bug worth avoiding here - silently adding the\n    \/\/ wrong size to the cart. Here the select is only a remote control.\n    \/\/\n    \/\/ In the Dawn family the radio is visually hidden and its \u003clabel\u003e is styled\n    \/\/ as the button, so the radios legitimately report offsetParent === null -\n    \/\/ the visibility test used elsewhere must NOT be applied to them.\n    buildSize();\n    buildSwatches();\n\n    \/\/ Quantity picker off the PDP (Ole, 2026-08-31). The INPUT is kept in the\n    \/\/ form and pinned to 1 - Shopify needs a quantity on the add-to-cart POST,\n    \/\/ and ripping the field out is how a theme starts adding nothing to the\n    \/\/ cart. Only the visible control is hidden.\n    hideQty();\n\n    src.classList.add('slt-src--done');\n    document.documentElement.classList.add('slt-on');\n  }\n\n  \/\/ Built as its own function because the theme RE-RENDERS the buy box on every\n  \/\/ variant change, which throws the dropdown away and brings the button row\n  \/\/ back. The observer at the bottom calls this again whenever that happens.\n  \/\/ ---------------------------------------------------------------- pickers\n  \/\/\n  \/\/ Horizon does not name its variant controls \"Size\" \/ \"Colour\" the way the\n  \/\/ Dawn family does, and it builds them from web components whose internals\n  \/\/ can sit in a shadow root that document.querySelectorAll cannot see. Keying\n  \/\/ off the option NAME therefore matched nothing and both builders silently\n  \/\/ did nothing - which is why the buttons were still there.\n  \/\/\n  \/\/ So nothing is matched by name any more. Each product ships the actual\n  \/\/ option VALUES it has (\"UK 8 (S)\", \"Champagne\", ...) and the control is\n  \/\/ found by those, walking shadow roots. That is theme-agnostic: it works\n  \/\/ wherever the values are rendered, whatever the markup is called.\n\n  \/\/ A class cannot hide anything that lives inside a shadow root: the\n  \/\/ stylesheet is in the light DOM and CSS does not cross the boundary. That\n  \/\/ the theme's own size buttons and colour buttons stayed on screen next to\n  \/\/ the new controls. Inline styles DO apply inside a shadow root, so the\n  \/\/ originals are hidden with style.display instead of a class.\n  function hideEl(el){\n    if (!el || el === document.body) return;\n    try { el.style.setProperty('display', 'none', 'important'); } catch (e) {}\n    if (el.classList) el.classList.add('slt-hide');\n  }\n\n  \/\/ Resolve the thing to hide. If the control sits in a shadow root we hide the\n  \/\/ component HOST, which is in the light DOM and takes the whole picker with\n  \/\/ it; otherwise the smallest wrapper that holds every matched control.\n  function containerFor(els){\n    var list = [];\n    for (var i = 0; i \u003c els.length; i++) if (els[i]) list.push(els[i]);\n    if (!list.length) return null;\n    var first = list[0];\n    var root = first.getRootNode ? first.getRootNode() : document;\n    if (root !== document \u0026\u0026 root.host) {\n      \/\/ ...unless that host also owns Add to cart. Hiding the component would\n      \/\/ then take the buy button with it, which is the one thing that must\n      \/\/ never happen. Fall through to the wrapper walk instead.\n      var h = root.host;\n      var ownsAdd = h.querySelector \u0026\u0026 h.querySelector('button[name=add], [name=add]');\n      if (!ownsAdd \u0026\u0026 h.shadowRoot) {\n        ownsAdd = h.shadowRoot.querySelector('button[name=add], [name=add]');\n      }\n      if (!ownsAdd) return h;\n    }\n\n    var n = first.parentNode;\n    for (var d = 0; d \u003c 8 \u0026\u0026 n \u0026\u0026 n !== document.body; d++) {\n      var all = true;\n      for (var j = 0; j \u003c list.length; j++) {\n        if (!n.contains(list[j])) { all = false; break; }\n      }\n      \/\/ never swallow the whole buy box or the add-to-cart form\n      if (all \u0026\u0026 !n.querySelector('button[name=add], [name=add]')) return n;\n      n = n.parentNode;\n    }\n    return first.closest('fieldset,.product-form__input,[class*=\"variant\"],ul')\n           || first.parentNode;\n  }\n\n  function deepAll(sel, root, out){\n    out = out || []; root = root || document;\n    try { Array.prototype.push.apply(out, root.querySelectorAll(sel)); } catch (e) {}\n    var els = root.querySelectorAll('*');\n    for (var i = 0; i \u003c els.length; i++) {\n      if (els[i].shadowRoot) deepAll(sel, els[i].shadowRoot, out);\n    }\n    return out;\n  }\n\n  function norm(x){\n    return String(x == null ? '' : x).replace(\/\\s+\/g, ' ').trim().toLowerCase();\n  }\n\n  \/\/ Find whatever control renders `values`. Returns a uniform handle so the\n  \/\/ callers do not care which of the three shapes the theme used.\n  function findControl(values){\n    var want = {};\n    for (var v = 0; v \u003c values.length; v++) want[norm(values[v])] = v;\n    var need = Math.min(2, values.length);\n\n    \/\/ 1 - a \u003cselect\u003e whose options cover the values\n    var sels = deepAll('select');\n    for (var s = 0; s \u003c sels.length; s++) {\n      var sl = sels[s];\n      if (sl.classList.contains('slt-size')) continue;\n      var hits = 0, map = {};\n      for (var o = 0; o \u003c sl.options.length; o++) {\n        var k = (norm(sl.options[o].value) in want)\n              ? norm(sl.options[o].value) : norm(sl.options[o].textContent);\n        if (k in want) { hits++; map[want[k]] = o; }\n      }\n      if (hits \u003e= need) {\n        return {kind: 'select', el: sl, map: map,\n          container: containerFor([sl]),\n          current: function(){\n            var oo = sl.options[sl.selectedIndex];\n            return oo ? ((norm(oo.value) in want) ? oo.value : oo.textContent) : '';\n          },\n          pick: function(i){\n            if (map[i] == null) return;\n            sl.selectedIndex = map[i];\n            sl.dispatchEvent(new Event('input',  {bubbles: true}));\n            sl.dispatchEvent(new Event('change', {bubbles: true}));\n          }};\n      }\n    }\n\n    \/\/ 2 - radio inputs carrying the values\n    var rs = deepAll('input[type=radio]'), radios = [];\n    for (var r = 0; r \u003c rs.length; r++) {\n      if (norm(rs[r].value) in want) radios[want[norm(rs[r].value)]] = rs[r];\n    }\n    var got = 0, firstR = null;\n    for (var g = 0; g \u003c values.length; g++) if (radios[g]) { got++; firstR = firstR || radios[g]; }\n    if (got \u003e= need \u0026\u0026 firstR) {\n      return {kind: 'radio', els: radios,\n        container: containerFor(radios),\n        current: function(){\n          for (var z = 0; z \u003c radios.length; z++) {\n            if (radios[z] \u0026\u0026 radios[z].checked) return radios[z].value;\n          }\n          return '';\n        },\n        pick: function(i){\n          var rd = radios[i]; if (!rd) return;\n          rd.checked = true;\n          rd.dispatchEvent(new Event('input',  {bubbles: true}));\n          rd.dispatchEvent(new Event('change', {bubbles: true}));\n        }};\n    }\n\n    \/\/ 3 - clickable buttons \/ labels whose TEXT is the value (Horizon's pills)\n    var cands = deepAll('button,label,[role=radio],[role=option],a'), btns = [];\n    for (var c = 0; c \u003c cands.length; c++) {\n      var e = cands[c];\n      if (e.closest \u0026\u0026 e.closest('.slt-bb')) continue;      \/\/ never our own UI\n      var t = norm(e.textContent);\n      if ((t in want) \u0026\u0026 btns[want[t]] == null) btns[want[t]] = e;\n    }\n    var got2 = 0, firstB = null;\n    for (var g2 = 0; g2 \u003c values.length; g2++) if (btns[g2]) { got2++; firstB = firstB || btns[g2]; }\n    if (got2 \u003e= need \u0026\u0026 firstB) {\n      return {kind: 'button', els: btns,\n        container: containerFor(btns),\n        current: function(){\n          for (var z = 0; z \u003c btns.length; z++) {\n            var b = btns[z]; if (!b) continue;\n            if (b.getAttribute('aria-checked') === 'true'\n                || b.getAttribute('aria-selected') === 'true'\n                || b.classList.contains('is-selected')\n                || b.classList.contains('selected')\n                || (b.control \u0026\u0026 b.control.checked)) return b.textContent.trim();\n          }\n          return '';\n        },\n        pick: function(i){ var b = btns[i]; if (b) b.click(); }};\n    }\n    return null;\n  }\n\n  function buildSize(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.sizes) return;\n      if (document.querySelector('.slt-size')) return;\n      var vals = JSON.parse(src.dataset.sizes);\n      if (!vals || vals.length \u003c 2) return;\n      var ctl = findControl(vals);\n      if (!ctl) return;\n      if (ctl.kind === 'select') {\n        \/\/ The theme already renders a dropdown - style that one rather than\n        \/\/ stacking a second control on top of it.\n        ctl.el.classList.add('slt-size');\n        document.documentElement.setAttribute('data-slt-size', 'native');\n        return;\n      }\n      var sel = document.createElement('select');\n      sel.className = 'slt-size';\n      sel.setAttribute('aria-label', 'Size');\n      var cur = norm(ctl.current());\n      for (var i = 0; i \u003c vals.length; i++) {\n        var op = document.createElement('option');\n        op.value = String(i); op.textContent = vals[i];\n        if (norm(vals[i]) === cur) op.selected = true;\n        sel.appendChild(op);\n      }\n      sel.addEventListener('change', function(){ ctl.pick(parseInt(this.value, 10)); });\n      var lbl = document.createElement('label');\n      lbl.className = 'slt-size__lbl'; lbl.textContent = 'Size';\n      var holder = document.createElement('div');\n      holder.className = 'slt-bb slt-size__wrap';\n      holder.appendChild(lbl); holder.appendChild(sel);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(holder, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-size', ctl.kind);\n    } catch (e) {}\n  }\n\n  function buildSwatches(){\n    try {\n      var src = document.querySelector('.slt-src');\n      if (!src || !src.dataset.swatches) return;\n      if (document.querySelector('.slt-sw')) return;\n      var data = JSON.parse(src.dataset.swatches);\n      if (!data || !data.opts || data.opts.length \u003c 2) return;\n      var vals = data.opts.map(function(o){ return o.v; });\n      var ctl = findControl(vals);\n      if (!ctl) return;\n\n      var wrap = document.createElement('div');\n      wrap.className = 'slt-bb slt-sw__wrap';\n      var head = document.createElement('div');\n      head.className = 'slt-sw__lbl';\n      head.innerHTML = '\u003cspan\u003eColour\u003c\/span\u003e\u003cb class=\"slt-sw__name\"\u003e\u003c\/b\u003e';\n      var nameEl = head.querySelector('.slt-sw__name');\n      var row = document.createElement('div'); row.className = 'slt-sw';\n      var cur = norm(ctl.current());\n\n      data.opts.forEach(function(o, i){\n        var b = document.createElement('button');\n        b.type = 'button'; b.className = 'slt-sw__i';\n        b.title = o.v; b.setAttribute('aria-label', o.v);\n        if (o.img) b.style.backgroundImage = 'url(\"' + o.img + '\")';\n        else b.style.background = o.hex || '#C2C4C7';\n        if (norm(o.v) === cur) { b.classList.add('is-on'); nameEl.textContent = o.v; }\n        b.addEventListener('click', function(){\n          ctl.pick(i);\n          nameEl.textContent = o.v;\n          var sib = row.querySelectorAll('.slt-sw__i');\n          for (var k = 0; k \u003c sib.length; k++) sib[k].classList.remove('is-on');\n          b.classList.add('is-on');\n        });\n        row.appendChild(b);\n      });\n      if (!nameEl.textContent \u0026\u0026 data.opts[0]) nameEl.textContent = data.opts[0].v;\n\n      wrap.appendChild(head); wrap.appendChild(row);\n      if (!ctl.container || !ctl.container.parentNode) return;\n      ctl.container.parentNode.insertBefore(wrap, ctl.container);\n      hideEl(ctl.container);\n      document.documentElement.setAttribute('data-slt-colour', data.tier + ':' + ctl.kind);\n    } catch (e) {}\n  }\n\n  function hideQty(){\n    var qty = document.querySelector('input[name=quantity], input[name=\"quantity\"]');\n    if (qty) {\n      if (!qty.value || qty.value === '0') qty.value = '1';\n      var box = qty;\n      for (var q = 0; q \u003c 3 \u0026\u0026 box.parentNode; q++) {\n        box = box.parentNode;\n        var cls = (box.className || '').toString().toLowerCase();\n        var tag = (box.tagName || '').toLowerCase();\n        if (\/quantity\/.test(cls) || \/quantity\/.test(tag)) break;\n      }\n      if (box \u0026\u0026 box !== document.body) box.classList.add('slt-hide');\n      \/\/ the theme usually prints a separate \u003clabel\u003eQuantity\u003c\/label\u003e\n      var lab = document.querySelector('label[for=\"'+(qty.id||'')+'\"]');\n      if (lab) lab.classList.add('slt-hide');\n    }\n  }\n\n  \/\/ The sizing-table link opens the accordion row further down the page.\n  document.addEventListener('click', function(e){\n    var a = e.target.closest \u0026\u0026 e.target.closest('.slt-fit__link');\n    if (!a) return;\n    var d = document.getElementById('slt-size-guide');\n    if (!d) return;\n    e.preventDefault(); d.open = true;\n    d.scrollIntoView({behavior:'smooth', block:'center'});\n  });\n\n  if (document.readyState !== 'loading') place();\n  else document.addEventListener('DOMContentLoaded', place);\n  \/\/ Horizon re-renders the buy box on a variant change, which throws our blocks\n  \/\/ away; re-place them when that happens.\n  document.addEventListener('variant:change', function(){\n    var s = document.querySelector('.slt-src'); if (s) delete s.dataset.done;\n    place();\n  });\n  setTimeout(place, 1200);\n\n  \/\/ The buy box is re-rendered on every variant change, which deletes the size\n  \/\/ dropdown and restores the theme's button row. Watch for that and rebuild.\n  \/\/ Debounced, and it only acts when the dropdown is genuinely missing while\n  \/\/ size radios are present, so it cannot loop against its own mutations.\n  \/\/ NOT debounced on a timer any more (Ole, 2026-11-02: \"swatches disappear and\n  \/\/ the button jumps\"). A 120 ms timer let the browser paint the buy box with the\n  \/\/ swatches and size dropdown missing. A MutationObserver callback runs before\n  \/\/ the next paint, so rebuilding inside it means the gap is never drawn. The\n  \/\/ `busy` flag stops re-entry; every step only acts when its piece is missing,\n  \/\/ so its own mutations settle on the next callback.\n  var busy = false;\n  var reobserve = function(){\n    if (busy) return;\n    busy = true;\n    try {\n      \/\/ Rebuild whichever control the re-render destroyed. Checking only the\n      \/\/ size dropdown left the colour swatches gone after every colour click -\n      \/\/ the theme replaces the whole buy box, not just the price.\n      \/\/ The re-render also wipes the price colours and the SAVE badge, and\n      \/\/ repainting them is not optional: after a colour click the price went\n      \/\/ back to the theme's black with no badge.\n      if (window.__sltPaint \u0026\u0026 !deepAll('[data-slt-now]').length) {\n        try { window.__sltPaint(); } catch (e) {}\n      }\n      var needSize = !document.querySelector('.slt-size');\n      var needSw   = !document.querySelector('.slt-sw');\n      if (needSize) buildSize();\n      if (needSw)   buildSwatches();\n      if (needSize || needSw) hideQty();\n    } finally { busy = false; }\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Black \/ M","offer_id":61521272734030,"sku":"SLT1123-001","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":61521272766798,"sku":"SLT1123-002","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ M","offer_id":61521272799566,"sku":"SLT1123-003","price":66.99,"currency_code":"USD","in_stock":true},{"title":"White \/ M","offer_id":61521272832334,"sku":"SLT1123-004","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521272865102,"sku":"SLT1123-005","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":61521272897870,"sku":"SLT1123-006","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ L","offer_id":61521272930638,"sku":"SLT1123-007","price":66.99,"currency_code":"USD","in_stock":true},{"title":"White \/ L","offer_id":61521272963406,"sku":"SLT1123-008","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521272996174,"sku":"SLT1123-009","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":61521273028942,"sku":"SLT1123-010","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XL","offer_id":61521273061710,"sku":"SLT1123-011","price":66.99,"currency_code":"USD","in_stock":true},{"title":"White \/ XL","offer_id":61521273094478,"sku":"SLT1123-012","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":61521273127246,"sku":"SLT1123-013","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 2XL","offer_id":61521273160014,"sku":"SLT1123-014","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 2XL","offer_id":61521273192782,"sku":"SLT1123-015","price":66.99,"currency_code":"USD","in_stock":true},{"title":"White \/ 2XL","offer_id":61521273225550,"sku":"SLT1123-016","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":61521273258318,"sku":"SLT1123-017","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 3XL","offer_id":61521273291086,"sku":"SLT1123-018","price":66.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 3XL","offer_id":61521273323854,"sku":"SLT1123-019","price":66.99,"currency_code":"USD","in_stock":true},{"title":"White \/ 3XL","offer_id":61521273356622,"sku":"SLT1123-020","price":66.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amelia-elegant-winter-puffer-jacket-for-women_f1_studio.jpg?v=1793709801"}],"url":"https:\/\/www.solteri.co\/collections\/autumn-edit.oembed?page=2","provider":"SOLTERI","version":"1.0","type":"link"}