{"title":"Medium Jackets","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":"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":"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":"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":"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":"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":"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":"daria-longline-quilted-puffer-jacket","title":"Daria - Longline Quilted 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 Jacket for Real Warmth\u003c\/h2\u003e\n\u003cp\u003eDaria is a padded jacket with a soft breathable shell and an insulating filling. It gives a lightweight, padded feel that wraps comfortably around the body and keeps you warm.\u003c\/p\u003e\n\u003cp\u003eThe cut is longer for full coverage, with a modern feminine look, a zip front and side pockets for convenience. Six colours: yellow, red, green, gray, dark blue and black.\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=\"87.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Yellow\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amelia-cozy-quilted-winter-jacket-for-women_f1_studio.jpg?v=1793709802\u0026amp;width=96\"},{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amelia-cozy-quilted-winter-jacket-for-women_c_red_studio.jpg?v=1793709803\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amelia-cozy-quilted-winter-jacket-for-women_c_green_studio.jpg?v=1793709802\u0026amp;width=96\"},{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amelia-cozy-quilted-winter-jacket-for-women_c_gray_studio.jpg?v=1793709802\u0026amp;width=96\"},{\"v\":\"Dark Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amelia-cozy-quilted-winter-jacket-for-women_c_dark-blue_studio.jpg?v=1793709803\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amelia-cozy-quilted-winter-jacket-for-women_c_black_studio.jpg?v=1793709803\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":"Yellow \/ XS","offer_id":61521273782606,"sku":"SLT1124-001","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Yellow \/ S","offer_id":61521273815374,"sku":"SLT1124-002","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Yellow \/ M","offer_id":61521273848142,"sku":"SLT1124-003","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Yellow \/ L","offer_id":61521273880910,"sku":"SLT1124-004","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Yellow \/ XL","offer_id":61521273913678,"sku":"SLT1124-005","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Yellow \/ 2XL","offer_id":61521273946446,"sku":"SLT1124-006","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XS","offer_id":61521273979214,"sku":"SLT1124-007","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ S","offer_id":61521274011982,"sku":"SLT1124-008","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ M","offer_id":61521274044750,"sku":"SLT1124-009","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ L","offer_id":61521274077518,"sku":"SLT1124-010","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XL","offer_id":61521274110286,"sku":"SLT1124-011","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 2XL","offer_id":61521274143054,"sku":"SLT1124-012","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XS","offer_id":61521274175822,"sku":"SLT1124-013","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ S","offer_id":61521274208590,"sku":"SLT1124-014","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ M","offer_id":61521274241358,"sku":"SLT1124-015","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ L","offer_id":61521274274126,"sku":"SLT1124-016","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XL","offer_id":61521274306894,"sku":"SLT1124-017","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 2XL","offer_id":61521274339662,"sku":"SLT1124-018","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XS","offer_id":61521274372430,"sku":"SLT1124-019","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ S","offer_id":61521274405198,"sku":"SLT1124-020","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ M","offer_id":61521274437966,"sku":"SLT1124-021","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ L","offer_id":61521274470734,"sku":"SLT1124-022","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XL","offer_id":61521274503502,"sku":"SLT1124-023","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 2XL","offer_id":61521274536270,"sku":"SLT1124-024","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ XS","offer_id":61521274569038,"sku":"SLT1124-025","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ S","offer_id":61521274601806,"sku":"SLT1124-026","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ M","offer_id":61521274634574,"sku":"SLT1124-027","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ L","offer_id":61521274667342,"sku":"SLT1124-028","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ XL","offer_id":61521274700110,"sku":"SLT1124-029","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Dark Blue \/ 2XL","offer_id":61521274732878,"sku":"SLT1124-030","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XS","offer_id":61521274765646,"sku":"SLT1124-031","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521274798414,"sku":"SLT1124-032","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521274831182,"sku":"SLT1124-033","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521274863950,"sku":"SLT1124-034","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521274896718,"sku":"SLT1124-035","price":87.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":61521274929486,"sku":"SLT1124-036","price":87.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amelia-cozy-quilted-winter-jacket-for-women_f1_studio.jpg?v=1793709802"},{"product_id":"eadie-plush-panel-hooded-puffer-jacket","title":"Eadie - Plush Panel 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 Puffer With Plush Panels and a Relaxed Shape\u003c\/h2\u003e\n\u003cp\u003eEadie is a short hooded puffer cut relaxed through the body, with a quilted padded front and soft plush panels across the hood, shoulders, sleeves and lower half. The two textures sit tone on tone, so the effect is cosy rather than busy.\u003c\/p\u003e\n\u003cp\u003eA full-length zip is backed by snap buttons, and fitted cuffs keep the wind out. Two deep side pockets hold hands, phone and keys. Choose gray, black, beige or brown. Machine wash cold, gentle cycle, lay flat to dry.\u003c\/p\u003e\n\u003cp\u003eSized 4-6 to 20. 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\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(4-6)\u003c\/td\u003e\n\u003ctd\u003e115 \/ 45.3\u003c\/td\u003e\n\u003ctd\u003e38 \/ 15.0\u003c\/td\u003e\n\u003ctd\u003e98 \/ 38.6\u003c\/td\u003e\n\u003ctd\u003e60 \/ 23.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eM(8-10)\u003c\/td\u003e\n\u003ctd\u003e120 \/ 47.2\u003c\/td\u003e\n\u003ctd\u003e39.5 \/ 15.6\u003c\/td\u003e\n\u003ctd\u003e100 \/ 39.4\u003c\/td\u003e\n\u003ctd\u003e61 \/ 24.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eL(12-14)\u003c\/td\u003e\n\u003ctd\u003e127 \/ 50.0\u003c\/td\u003e\n\u003ctd\u003e41 \/ 16.1\u003c\/td\u003e\n\u003ctd\u003e102 \/ 40.2\u003c\/td\u003e\n\u003ctd\u003e62 \/ 24.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eXL(16)\u003c\/td\u003e\n\u003ctd\u003e135 \/ 53.1\u003c\/td\u003e\n\u003ctd\u003e42.5 \/ 16.7\u003c\/td\u003e\n\u003ctd\u003e104 \/ 40.9\u003c\/td\u003e\n\u003ctd\u003e63 \/ 24.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2XL(18)\u003c\/td\u003e\n\u003ctd\u003e140 \/ 55.1\u003c\/td\u003e\n\u003ctd\u003e44 \/ 17.3\u003c\/td\u003e\n\u003ctd\u003e106 \/ 41.7\u003c\/td\u003e\n\u003ctd\u003e64 \/ 25.2\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3XL(20)\u003c\/td\u003e\n\u003ctd\u003e145 \/ 57.1\u003c\/td\u003e\n\u003ctd\u003e45.5 \/ 17.9\u003c\/td\u003e\n\u003ctd\u003e108 \/ 42.5\u003c\/td\u003e\n\u003ctd\u003e65 \/ 25.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=\"119.99\" data-was=\"\" data-sizes='[\"S(4-6)\",\"M(8-10)\",\"L(12-14)\",\"XL(16)\",\"2XL(18)\",\"3XL(20)\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/layla-plush-panel-hooded-puffer-jacket_f1_studio.jpg?v=1793709804\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/layla-plush-panel-hooded-puffer-jacket_c_black_studio.jpg?v=1793709804\u0026amp;width=96\"},{\"v\":\"Beige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/layla-plush-panel-hooded-puffer-jacket_c_beige_studio.jpg?v=1793709804\u0026amp;width=96\"},{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/layla-plush-panel-hooded-puffer-jacket_c_brown_studio.jpg?v=1793709804\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.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":"Gray \/ S(4-6)","offer_id":61521275257166,"sku":"SLT1125-001","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ M(8-10)","offer_id":61521275289934,"sku":"SLT1125-002","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ L(12-14)","offer_id":61521275322702,"sku":"SLT1125-003","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XL(16)","offer_id":61521275355470,"sku":"SLT1125-004","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 2XL(18)","offer_id":61521275388238,"sku":"SLT1125-005","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 3XL(20)","offer_id":61521275421006,"sku":"SLT1125-006","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S(4-6)","offer_id":61521275453774,"sku":"SLT1125-007","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M(8-10)","offer_id":61521275486542,"sku":"SLT1125-008","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L(12-14)","offer_id":61521275519310,"sku":"SLT1125-009","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL(16)","offer_id":61521275552078,"sku":"SLT1125-010","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL(18)","offer_id":61521275584846,"sku":"SLT1125-011","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL(20)","offer_id":61521275617614,"sku":"SLT1125-012","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ S(4-6)","offer_id":61521275650382,"sku":"SLT1125-013","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ M(8-10)","offer_id":61521275683150,"sku":"SLT1125-014","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ L(12-14)","offer_id":61521275715918,"sku":"SLT1125-015","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ XL(16)","offer_id":61521275748686,"sku":"SLT1125-016","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 2XL(18)","offer_id":61521275781454,"sku":"SLT1125-017","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 3XL(20)","offer_id":61521275814222,"sku":"SLT1125-018","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S(4-6)","offer_id":61521275846990,"sku":"SLT1125-019","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M(8-10)","offer_id":61521275879758,"sku":"SLT1125-020","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L(12-14)","offer_id":61521275912526,"sku":"SLT1125-021","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL(16)","offer_id":61521275945294,"sku":"SLT1125-022","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 2XL(18)","offer_id":61521275978062,"sku":"SLT1125-023","price":119.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 3XL(20)","offer_id":61521276010830,"sku":"SLT1125-024","price":119.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/layla-plush-panel-hooded-puffer-jacket_f1_studio.jpg?v=1793709804"},{"product_id":"darcey-funnel-neck-plush-jacket","title":"Darcey - Funnel Neck Plush 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 Funnel Neck Jacket\u003c\/h2\u003e\n\u003cp\u003eDarcey is a women's funnel neck jacket made from a warm plush textile. It is designed for warmth and comfort in the cold season and gives a soft, snug feel on chilly days.\u003c\/p\u003e\n\u003cp\u003eIt comes in dark brown and light brown, and the plush finish is soft to the touch and cosy against the neck on chilly days. Machine washable.\u003c\/p\u003e\n\u003cp\u003eSized M to XS.\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=\"50.99\" data-was=\"\" data-sizes='[\"M\",\"S\",\"L\",\"XS\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Dark Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Emilia-Cozy-Autumn-Women-s-Teddy-Fleece-Jacket-23.jpg?v=1793737694\u0026amp;width=96\"},{\"v\":\"Light Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Emilia-Cozy-Autumn-Women-s-Teddy-Fleece-Jacket-91.jpg?v=1793737695\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 Brown \/ M","offer_id":61521276764494,"sku":"SLT1127-001","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Light Brown \/ S","offer_id":61521276797262,"sku":"SLT1127-002","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Light Brown \/ M","offer_id":61521276830030,"sku":"SLT1127-003","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Light Brown \/ L","offer_id":61521276862798,"sku":"SLT1127-004","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Dark Brown \/ L","offer_id":61521276895566,"sku":"SLT1127-005","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Dark Brown \/ S","offer_id":61521276928334,"sku":"SLT1127-006","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Light Brown \/ XS","offer_id":61521276961102,"sku":"SLT1127-007","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Dark Brown \/ XS","offer_id":61521276993870,"sku":"SLT1127-008","price":50.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Emilia-Cozy-Autumn-Women-s-Teddy-Fleece-Jacket-91.jpg?v=1793737695"},{"product_id":"fenella-warm-softshell-outdoor-jacket","title":"Fenella - Warm Softshell Outdoor 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\u003eSoftshell Jacket for Ultimate Comfort\u003c\/h2\u003e\n\u003cp\u003eFenella is a softshell jacket in a warm, fluffy textile, designed for outdoor enthusiasts. It gives windproof protection and thermal insulation, so you stay comfortable in changing weather while fishing, hiking and camping.\u003c\/p\u003e\n\u003cp\u003eFenella is made from warm fluffy textile and comes in five colours: khaki, green, navy, grey and black. It suits long days outdoors when the weather keeps changing. Machine washable.\u003c\/p\u003e\n\u003cp\u003eSized 92-100kg to 55-65kg. 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\u003eM\u003c\/td\u003e\n\u003ctd\u003e108 \/ 42.5\u003c\/td\u003e\n\u003ctd\u003e51 \/ 20.1\u003c\/td\u003e\n\u003ctd\u003e57 \/ 22.4\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\u003e112 \/ 44.1\u003c\/td\u003e\n\u003ctd\u003e53 \/ 20.9\u003c\/td\u003e\n\u003ctd\u003e58 \/ 22.8\u003c\/td\u003e\n\u003ctd\u003e68 \/ 26.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eXL\u003c\/td\u003e\n\u003ctd\u003e116 \/ 45.7\u003c\/td\u003e\n\u003ctd\u003e55 \/ 21.7\u003c\/td\u003e\n\u003ctd\u003e59 \/ 23.2\u003c\/td\u003e\n\u003ctd\u003e70 \/ 27.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eXXL\u003c\/td\u003e\n\u003ctd\u003e120 \/ 47.2\u003c\/td\u003e\n\u003ctd\u003e57 \/ 22.4\u003c\/td\u003e\n\u003ctd\u003e60 \/ 23.6\u003c\/td\u003e\n\u003ctd\u003e72 \/ 28.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eXXXL\u003c\/td\u003e\n\u003ctd\u003e124 \/ 48.8\u003c\/td\u003e\n\u003ctd\u003e58 \/ 22.8\u003c\/td\u003e\n\u003ctd\u003e61 \/ 24.0\u003c\/td\u003e\n\u003ctd\u003e74 \/ 29.1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e4XL\u003c\/td\u003e\n\u003ctd\u003e128 \/ 50.4\u003c\/td\u003e\n\u003ctd\u003e59 \/ 23.2\u003c\/td\u003e\n\u003ctd\u003e62 \/ 24.4\u003c\/td\u003e\n\u003ctd\u003e76 \/ 29.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5XL\u003c\/td\u003e\n\u003ctd\u003e132 \/ 52.0\u003c\/td\u003e\n\u003ctd\u003e60 \/ 23.6\u003c\/td\u003e\n\u003ctd\u003e63 \/ 24.8\u003c\/td\u003e\n\u003ctd\u003e76 \/ 29.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. 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=\"94.99\" data-was=\"\" data-sizes='[\"XXXL(92-100kg)\",\"XXL(82-92kg)\",\"XL(72-82kg)\",\"L(65-72kg)\",\"4XL(100-110kg)\",\"5XL(110-120kg)\",\"M(55-65kg)\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Khaki Jacket\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/gabrielle-warm-softshell-fleece-jacket-for-outdoor-activities_f1_studio.jpg?v=1793709808\u0026amp;width=96\"},{\"v\":\"Green Jacket\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/gabrielle-warm-softshell-fleece-jacket-for-outdoor-activities_c_green-jacket_studio.jpg?v=1793709808\u0026amp;width=96\"},{\"v\":\"Navy Jacket\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/gabrielle-warm-softshell-fleece-jacket-for-outdoor-activities_c_navy-jacket_studio.jpg?v=1793709807\u0026amp;width=96\"},{\"v\":\"Gray Jacket\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/gabrielle-warm-softshell-fleece-jacket-for-outdoor-activities_c_gray-jacket_studio.jpg?v=1793709808\u0026amp;width=96\"},{\"v\":\"Black Jacket\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/gabrielle-warm-softshell-fleece-jacket-for-outdoor-activities_c_black-jacket_studio.jpg?v=1793709808\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: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":"Khaki Jacket \/ XXXL(92-100kg)","offer_id":61521277452622,"sku":"SLT1128-001","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Green Jacket \/ XXL(82-92kg)","offer_id":61521277485390,"sku":"SLT1128-002","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Navy Jacket \/ XL(72-82kg)","offer_id":61521277518158,"sku":"SLT1128-003","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Green Jacket \/ L(65-72kg)","offer_id":61521277550926,"sku":"SLT1128-004","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Navy Jacket \/ 4XL(100-110kg)","offer_id":61521277583694,"sku":"SLT1128-005","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Gray Jacket \/ 5XL(110-120kg)","offer_id":61521277616462,"sku":"SLT1128-006","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Khaki Jacket \/ M(55-65kg)","offer_id":61521277649230,"sku":"SLT1128-007","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Green Jacket \/ XXXL(92-100kg)","offer_id":61521277681998,"sku":"SLT1128-008","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Khaki Jacket \/ XL(72-82kg)","offer_id":61521277714766,"sku":"SLT1128-009","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Navy Jacket \/ XXL(82-92kg)","offer_id":61521277747534,"sku":"SLT1128-010","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Khaki Jacket \/ 4XL(100-110kg)","offer_id":61521277780302,"sku":"SLT1128-011","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Green Jacket \/ 4XL(100-110kg)","offer_id":61521277813070,"sku":"SLT1128-012","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Green Jacket \/ M(55-65kg)","offer_id":61521277845838,"sku":"SLT1128-013","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Black Jacket \/ XL(72-82kg)","offer_id":61521277878606,"sku":"SLT1128-014","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Gray Jacket \/ XL(72-82kg)","offer_id":61521277911374,"sku":"SLT1128-015","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Black Jacket \/ XXXL(92-100kg)","offer_id":61521277944142,"sku":"SLT1128-016","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Navy Jacket \/ L(65-72kg)","offer_id":61521277976910,"sku":"SLT1128-017","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Navy Jacket \/ 5XL(110-120kg)","offer_id":61521278009678,"sku":"SLT1128-018","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Green Jacket \/ 5XL(110-120kg)","offer_id":61521278042446,"sku":"SLT1128-019","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Navy Jacket \/ XXXL(92-100kg)","offer_id":61521278075214,"sku":"SLT1128-020","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Black Jacket \/ M(55-65kg)","offer_id":61521278107982,"sku":"SLT1128-021","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Gray Jacket \/ 4XL(100-110kg)","offer_id":61521278140750,"sku":"SLT1128-022","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Black Jacket \/ 5XL(110-120kg)","offer_id":61521278173518,"sku":"SLT1128-023","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Gray Jacket \/ L(65-72kg)","offer_id":61521278206286,"sku":"SLT1128-024","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Gray Jacket \/ XXXL(92-100kg)","offer_id":61521278239054,"sku":"SLT1128-025","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Black Jacket \/ 4XL(100-110kg)","offer_id":61521278271822,"sku":"SLT1128-026","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Khaki Jacket \/ XXL(82-92kg)","offer_id":61521278304590,"sku":"SLT1128-027","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Gray Jacket \/ XXL(82-92kg)","offer_id":61521278337358,"sku":"SLT1128-028","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Green Jacket \/ XL(72-82kg)","offer_id":61521278370126,"sku":"SLT1128-029","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Black Jacket \/ XXL(82-92kg)","offer_id":61521278402894,"sku":"SLT1128-030","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Khaki Jacket \/ 5XL(110-120kg)","offer_id":61521278435662,"sku":"SLT1128-031","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Khaki Jacket \/ L(65-72kg)","offer_id":61521278468430,"sku":"SLT1128-032","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Black Jacket \/ L(65-72kg)","offer_id":61521278501198,"sku":"SLT1128-033","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Gray Jacket \/ M(55-65kg)","offer_id":61521278533966,"sku":"SLT1128-034","price":94.99,"currency_code":"USD","in_stock":true},{"title":"Navy Jacket \/ M(55-65kg)","offer_id":61521278566734,"sku":"SLT1128-035","price":94.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/gabrielle-warm-softshell-fleece-jacket-for-outdoor-activities_f1_studio.jpg?v=1793709808"},{"product_id":"kenna-knee-length-button-coat","title":"Kenna - Knee-Length Button 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 Coat for the Cooler Months\u003c\/h2\u003e\n\u003cp\u003eKenna is a knee-length coat designed to give warmth and style during the cooler months. It is made for layering over your favourite outfits, so it fits easily into your daily wardrobe.\u003c\/p\u003e\n\u003cp\u003eMade from soft durable textile with a regular fit and a button closure, Kenna is available in brown, blue, green and grey. Machine wash cold.\u003c\/p\u003e\n\u003cp\u003eSized 2XS 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=\"0\" data-was=\"\" data-sizes='[\"2XS\",\"XS\",\"S\",\"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\/adeline-chic-autumn-jacket-ladies-for-warmth-and-style_f1_studio.jpg?v=1793709833\u0026amp;width=96\"},{\"v\":\"Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/adeline-chic-autumn-jacket-ladies-for-warmth-and-style_c_blue_studio.jpg?v=1793709833\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/adeline-chic-autumn-jacket-ladies-for-warmth-and-style_c_green_studio.jpg?v=1793709833\u0026amp;width=96\"},{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/adeline-chic-autumn-jacket-ladies-for-warmth-and-style_c_gray_studio.jpg?v=1793709832\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":61521304355150,"sku":"SLT1145-001","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XS","offer_id":61521304387918,"sku":"SLT1145-002","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S","offer_id":61521304420686,"sku":"SLT1145-003","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":61521304453454,"sku":"SLT1145-004","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":61521304486222,"sku":"SLT1145-005","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":61521304518990,"sku":"SLT1145-006","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 2XL","offer_id":61521304551758,"sku":"SLT1145-007","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 3XL","offer_id":61521304584526,"sku":"SLT1145-008","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 4XL","offer_id":61521304617294,"sku":"SLT1145-009","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 2XS","offer_id":61521304650062,"sku":"SLT1145-010","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XS","offer_id":61521304682830,"sku":"SLT1145-011","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ S","offer_id":61521304715598,"sku":"SLT1145-012","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ M","offer_id":61521304748366,"sku":"SLT1145-013","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ L","offer_id":61521304781134,"sku":"SLT1145-014","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XL","offer_id":61521304813902,"sku":"SLT1145-015","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 2XL","offer_id":61521304846670,"sku":"SLT1145-016","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 3XL","offer_id":61521304879438,"sku":"SLT1145-017","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 4XL","offer_id":61521304912206,"sku":"SLT1145-018","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 2XS","offer_id":61521304944974,"sku":"SLT1145-019","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XS","offer_id":61521304977742,"sku":"SLT1145-020","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ S","offer_id":61521305010510,"sku":"SLT1145-021","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ M","offer_id":61521305043278,"sku":"SLT1145-022","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ L","offer_id":61521305076046,"sku":"SLT1145-023","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XL","offer_id":61521305108814,"sku":"SLT1145-024","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 2XL","offer_id":61521305141582,"sku":"SLT1145-025","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 3XL","offer_id":61521305174350,"sku":"SLT1145-026","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 4XL","offer_id":61521305207118,"sku":"SLT1145-027","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 2XS","offer_id":61521305239886,"sku":"SLT1145-028","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XS","offer_id":61521305272654,"sku":"SLT1145-029","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ S","offer_id":61521305305422,"sku":"SLT1145-030","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ M","offer_id":61521305338190,"sku":"SLT1145-031","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ L","offer_id":61521305370958,"sku":"SLT1145-032","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XL","offer_id":61521305403726,"sku":"SLT1145-033","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 2XL","offer_id":61521305436494,"sku":"SLT1145-034","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 3XL","offer_id":61521305469262,"sku":"SLT1145-035","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 4XL","offer_id":61521305502030,"sku":"SLT1145-036","price":56.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/adeline-chic-autumn-jacket-ladies-for-warmth-and-style_f1_studio.jpg?v=1793709833"},{"product_id":"fabienne-belted-wrap-coat","title":"Fabienne - Belted 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\u003eBelted Wrap Coat With a Flattering Shape\u003c\/h2\u003e\n\u003cp\u003eFabienne is a belted wrap coat for those who appreciate a blend of comfort and polish. The wrap style and self-tie belt give a flattering silhouette that suits any outfit.\u003c\/p\u003e\n\u003cp\u003eMade from soft brushed textile with a mid-calf length and a self-tie belt closure. Choose from beige, chocolate, brown, black or khaki. Dry clean only.\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=\"0\" 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\/cassandra-elegant-belted-wrap-coat_f1_studio.jpg?v=1793709836\u0026amp;width=96\"},{\"v\":\"Chocolate\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cassandra-elegant-belted-wrap-coat_c_chocolate_studio.jpg?v=1793709836\u0026amp;width=96\"},{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cassandra-elegant-belted-wrap-coat_c_brown_studio.jpg?v=1793709836\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cassandra-elegant-belted-wrap-coat_c_black_studio.jpg?v=1793709836\u0026amp;width=96\"},{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cassandra-elegant-belted-wrap-coat_c_khaki_studio.jpg?v=1793709836\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":61521307238734,"sku":"SLT1147-001","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ M","offer_id":61521307271502,"sku":"SLT1147-002","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ L","offer_id":61521307304270,"sku":"SLT1147-003","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ XL","offer_id":61521307337038,"sku":"SLT1147-004","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 2XL","offer_id":61521307369806,"sku":"SLT1147-005","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Chocolate \/ S","offer_id":61521307402574,"sku":"SLT1147-006","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Chocolate \/ M","offer_id":61521307435342,"sku":"SLT1147-007","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Chocolate \/ L","offer_id":61521307468110,"sku":"SLT1147-008","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Chocolate \/ XL","offer_id":61521307500878,"sku":"SLT1147-009","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Chocolate \/ 2XL","offer_id":61521307533646,"sku":"SLT1147-010","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S","offer_id":61521307566414,"sku":"SLT1147-011","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":61521307599182,"sku":"SLT1147-012","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":61521307631950,"sku":"SLT1147-013","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":61521307664718,"sku":"SLT1147-014","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 2XL","offer_id":61521307697486,"sku":"SLT1147-015","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521307730254,"sku":"SLT1147-016","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521307763022,"sku":"SLT1147-017","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521307795790,"sku":"SLT1147-018","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521307828558,"sku":"SLT1147-019","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":61521307861326,"sku":"SLT1147-020","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ S","offer_id":61521307894094,"sku":"SLT1147-021","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ M","offer_id":61521307926862,"sku":"SLT1147-022","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ L","offer_id":61521307959630,"sku":"SLT1147-023","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XL","offer_id":61521307992398,"sku":"SLT1147-024","price":118.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 2XL","offer_id":61521308025166,"sku":"SLT1147-025","price":118.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cassandra-elegant-belted-wrap-coat_f1_studio.jpg?v=1793709836"},{"product_id":"hester-double-breasted-patch-pocket-coat","title":"Hester - Double-Breasted Patch-Pocket 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 Coat That Dresses Up Anything Underneath\u003c\/h2\u003e\n\u003cp\u003eHester is a mid-length coat with a notched lapel, two columns of buttons and two roomy patch pockets at the hip. The line is straight and easy, sitting just above the knee, so it works over a fitted turtleneck and slim trousers for the office as well as over a dress and boots for an evening out.\u003c\/p\u003e\n\u003cp\u003eThe warm soft brushed textile has a matte, slightly textured surface and stays light on the shoulders. Choose dark grey, grey, black or caramel. Machine wash cold on a gentle cycle and lay flat to dry.\u003c\/p\u003e\n\u003cp\u003eSized 4-6 to 16. 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\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(4-6)\u003c\/td\u003e\n\u003ctd\u003e115 \/ 45.3\u003c\/td\u003e\n\u003ctd\u003e38 \/ 15.0\u003c\/td\u003e\n\u003ctd\u003e98 \/ 38.6\u003c\/td\u003e\n\u003ctd\u003e60 \/ 23.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eM(8-10)\u003c\/td\u003e\n\u003ctd\u003e120 \/ 47.2\u003c\/td\u003e\n\u003ctd\u003e39.5 \/ 15.6\u003c\/td\u003e\n\u003ctd\u003e100 \/ 39.4\u003c\/td\u003e\n\u003ctd\u003e61 \/ 24.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eL(12-14)\u003c\/td\u003e\n\u003ctd\u003e127 \/ 50.0\u003c\/td\u003e\n\u003ctd\u003e41 \/ 16.1\u003c\/td\u003e\n\u003ctd\u003e102 \/ 40.2\u003c\/td\u003e\n\u003ctd\u003e62 \/ 24.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eXL(16)\u003c\/td\u003e\n\u003ctd\u003e135 \/ 53.1\u003c\/td\u003e\n\u003ctd\u003e42.5 \/ 16.7\u003c\/td\u003e\n\u003ctd\u003e104 \/ 40.9\u003c\/td\u003e\n\u003ctd\u003e63 \/ 24.8\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=\"0\" data-was=\"\" data-sizes='[\"S(4-6)\",\"M(8-10)\",\"L(12-14)\",\"XL(16)\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Dark Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/penelope-double-breasted-lapel-coat-with-patch-pockets_f1_studio.jpg?v=1793709839\u0026amp;width=96\"},{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/penelope-double-breasted-lapel-coat-with-patch-pockets_c_gray_studio.jpg?v=1793709839\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/penelope-double-breasted-lapel-coat-with-patch-pockets_c_black_studio.jpg?v=1793709839\u0026amp;width=96\"},{\"v\":\"Caramel\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/penelope-double-breasted-lapel-coat-with-patch-pockets_c_caramel_studio.jpg?v=1793709839\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.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":"Dark Gray \/ S(4-6)","offer_id":61521309696334,"sku":"SLT1149-001","price":99.99,"currency_code":"USD","in_stock":true},{"title":"Dark Gray \/ M(8-10)","offer_id":61521309729102,"sku":"SLT1149-002","price":99.99,"currency_code":"USD","in_stock":true},{"title":"Dark Gray \/ L(12-14)","offer_id":61521309761870,"sku":"SLT1149-003","price":99.99,"currency_code":"USD","in_stock":true},{"title":"Dark Gray \/ XL(16)","offer_id":61521309794638,"sku":"SLT1149-004","price":99.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ S(4-6)","offer_id":61521309827406,"sku":"SLT1149-005","price":99.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ M(8-10)","offer_id":61521309860174,"sku":"SLT1149-006","price":99.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ L(12-14)","offer_id":61521309892942,"sku":"SLT1149-007","price":99.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XL(16)","offer_id":61521309925710,"sku":"SLT1149-008","price":99.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S(4-6)","offer_id":61521309958478,"sku":"SLT1149-009","price":99.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M(8-10)","offer_id":61521309991246,"sku":"SLT1149-010","price":99.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L(12-14)","offer_id":61521310024014,"sku":"SLT1149-011","price":99.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL(16)","offer_id":61521310056782,"sku":"SLT1149-012","price":99.99,"currency_code":"USD","in_stock":true},{"title":"Caramel \/ S(4-6)","offer_id":61521310089550,"sku":"SLT1149-013","price":99.99,"currency_code":"USD","in_stock":true},{"title":"Caramel \/ M(8-10)","offer_id":61521310122318,"sku":"SLT1149-014","price":99.99,"currency_code":"USD","in_stock":true},{"title":"Caramel \/ L(12-14)","offer_id":61521310155086,"sku":"SLT1149-015","price":99.99,"currency_code":"USD","in_stock":true},{"title":"Caramel \/ XL(16)","offer_id":61521310187854,"sku":"SLT1149-016","price":99.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/penelope-double-breasted-lapel-coat-with-patch-pockets_f1_studio.jpg?v=1793709839"},{"product_id":"lorraine-long-open-front-belted-coat","title":"Lorraine - Long Open-Front Belted 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\u003eThe Long Belted Coat That Goes With Everything\u003c\/h2\u003e\n\u003cp\u003eLorraine is a long open-front coat with a wide notch collar and a soft, relaxed shape. Wear it loose and open over jeans and boots, or wrap it closed with the self-tie belt for a defined waist and a more polished line. The hem falls below the knee for a long silhouette.\u003c\/p\u003e\n\u003cp\u003eTwo deep pockets sit at the hips, and the easy cut layers over a jumper or a dress without pulling. Nine colours: olive, black, brown, camel, grey, pink, ivory, wine and navy. Dry clean or hand wash cold, lay flat to dry and steam to refresh.\u003c\/p\u003e\n\u003cp\u003eSized S 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\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eSize\u003c\/th\u003e\n\u003cth\u003eBust (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eWaist (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eHips (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\u003e86-90 \/ 33.9-35.4\u003c\/td\u003e\n\u003ctd\u003e68-72 \/ 26.8-28.3\u003c\/td\u003e\n\u003ctd\u003e92-96 \/ 36.2-37.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eM\u003c\/td\u003e\n\u003ctd\u003e90-95 \/ 35.4-37.4\u003c\/td\u003e\n\u003ctd\u003e72-77 \/ 28.3-30.3\u003c\/td\u003e\n\u003ctd\u003e96-101 \/ 37.8-39.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eL\u003c\/td\u003e\n\u003ctd\u003e95-101 \/ 37.4-39.8\u003c\/td\u003e\n\u003ctd\u003e77-83 \/ 30.3-32.7\u003c\/td\u003e\n\u003ctd\u003e101-107 \/ 39.8-42.1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eXL\u003c\/td\u003e\n\u003ctd\u003e101-107 \/ 39.8-42.1\u003c\/td\u003e\n\u003ctd\u003e83-89 \/ 32.7-35.0\u003c\/td\u003e\n\u003ctd\u003e107-113 \/ 42.1-44.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2XL\u003c\/td\u003e\n\u003ctd\u003e107-114 \/ 42.1-44.9\u003c\/td\u003e\n\u003ctd\u003e89-95 \/ 35.0-37.4\u003c\/td\u003e\n\u003ctd\u003e113-119 \/ 44.5-46.9\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=\"0\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Olive\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/celine-womens-long-open-front-belted-coat_f1_studio.jpg?v=1793709846\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/celine-womens-long-open-front-belted-coat_c_black_studio.jpg?v=1793709845\u0026amp;width=96\"},{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/celine-womens-long-open-front-belted-coat_c_brown_studio.jpg?v=1793709845\u0026amp;width=96\"},{\"v\":\"Camel\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/celine-womens-long-open-front-belted-coat_c_camel_studio.jpg?v=1793709845\u0026amp;width=96\"},{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/celine-womens-long-open-front-belted-coat_c_gray_studio.jpg?v=1793709846\u0026amp;width=96\"},{\"v\":\"Pink\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/celine-womens-long-open-front-belted-coat_c_pink_studio.jpg?v=1793709845\u0026amp;width=96\"},{\"v\":\"Ivory\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/celine-womens-long-open-front-belted-coat_c_ivory_studio.jpg?v=1793709845\u0026amp;width=96\"},{\"v\":\"Wine\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/celine-womens-long-open-front-belted-coat_c_wine_studio.jpg?v=1793709846\u0026amp;width=96\"},{\"v\":\"Navy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/celine-womens-long-open-front-belted-coat_c_navy_studio.jpg?v=1793709845\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":"Olive \/ S","offer_id":61521313628494,"sku":"SLT1154-001","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Olive \/ M","offer_id":61521313661262,"sku":"SLT1154-002","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Olive \/ L","offer_id":61521313694030,"sku":"SLT1154-003","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Olive \/ XL","offer_id":61521313726798,"sku":"SLT1154-004","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Olive \/ 2XL","offer_id":61521313759566,"sku":"SLT1154-005","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521313792334,"sku":"SLT1154-006","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521313825102,"sku":"SLT1154-007","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521313857870,"sku":"SLT1154-008","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521313890638,"sku":"SLT1154-009","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":61521313923406,"sku":"SLT1154-010","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S","offer_id":61521313956174,"sku":"SLT1154-011","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":61521313988942,"sku":"SLT1154-012","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":61521314021710,"sku":"SLT1154-013","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":61521314054478,"sku":"SLT1154-014","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 2XL","offer_id":61521314087246,"sku":"SLT1154-015","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ S","offer_id":61521314120014,"sku":"SLT1154-016","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ M","offer_id":61521314152782,"sku":"SLT1154-017","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ L","offer_id":61521314185550,"sku":"SLT1154-018","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ XL","offer_id":61521314218318,"sku":"SLT1154-019","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ 2XL","offer_id":61521314251086,"sku":"SLT1154-020","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ S","offer_id":61521314283854,"sku":"SLT1154-021","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ M","offer_id":61521314316622,"sku":"SLT1154-022","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ L","offer_id":61521314349390,"sku":"SLT1154-023","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XL","offer_id":61521314382158,"sku":"SLT1154-024","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 2XL","offer_id":61521314414926,"sku":"SLT1154-025","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ S","offer_id":61521314447694,"sku":"SLT1154-026","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ M","offer_id":61521314480462,"sku":"SLT1154-027","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ L","offer_id":61521314513230,"sku":"SLT1154-028","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ XL","offer_id":61521314545998,"sku":"SLT1154-029","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ 2XL","offer_id":61521314578766,"sku":"SLT1154-030","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Ivory \/ S","offer_id":61521314611534,"sku":"SLT1154-031","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Ivory \/ M","offer_id":61521314644302,"sku":"SLT1154-032","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Ivory \/ L","offer_id":61521314677070,"sku":"SLT1154-033","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Ivory \/ XL","offer_id":61521314709838,"sku":"SLT1154-034","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Ivory \/ 2XL","offer_id":61521314742606,"sku":"SLT1154-035","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Wine \/ S","offer_id":61521314775374,"sku":"SLT1154-036","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Wine \/ M","offer_id":61521314808142,"sku":"SLT1154-037","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Wine \/ L","offer_id":61521314840910,"sku":"SLT1154-038","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Wine \/ XL","offer_id":61521314873678,"sku":"SLT1154-039","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Wine \/ 2XL","offer_id":61521314906446,"sku":"SLT1154-040","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ S","offer_id":61521314939214,"sku":"SLT1154-041","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ M","offer_id":61521314971982,"sku":"SLT1154-042","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ L","offer_id":61521315004750,"sku":"SLT1154-043","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ XL","offer_id":61521315037518,"sku":"SLT1154-044","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ 2XL","offer_id":61521315070286,"sku":"SLT1154-045","price":49.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/celine-womens-long-open-front-belted-coat_f1_studio.jpg?v=1793709846"},{"product_id":"rosaline-tartan-single-breasted-long-coat","title":"Rosaline - Tartan Single-Breasted Long 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 Tartan Long Coat Shaped Like a Dress\u003c\/h2\u003e\n\u003cp\u003eRosaline is a long single breasted coat in a deep navy and green tartan. A neat shirt collar sits at the top, five gold tone buttons close the front, and shaped seams follow the body from the shoulder to the waist.\u003c\/p\u003e\n\u003cp\u003eBelow the waist it opens into a softly flared skirt that ends below the knee, so it moves well and reads as a dress when buttoned. Side pockets sit in the seams and the coat is lined. Wear it closed with knee boots, or open over a knit and a short skirt. Hand wash cold or dry clean.\u003c\/p\u003e\n\u003cp\u003eSized US 2 to US 8. 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\u003eBust (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eWaist (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\u003eUS 2\u003c\/td\u003e\n\u003ctd\u003e85 \/ 33.5\u003c\/td\u003e\n\u003ctd\u003e67 \/ 26.4\u003c\/td\u003e\n\u003ctd\u003e114 \/ 44.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eUS 4\u003c\/td\u003e\n\u003ctd\u003e88 \/ 34.6\u003c\/td\u003e\n\u003ctd\u003e70 \/ 27.6\u003c\/td\u003e\n\u003ctd\u003e115 \/ 45.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eUS 6\u003c\/td\u003e\n\u003ctd\u003e91 \/ 35.8\u003c\/td\u003e\n\u003ctd\u003e73 \/ 28.7\u003c\/td\u003e\n\u003ctd\u003e116 \/ 45.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eUS 8\u003c\/td\u003e\n\u003ctd\u003e94 \/ 37.0\u003c\/td\u003e\n\u003ctd\u003e76 \/ 29.9\u003c\/td\u003e\n\u003ctd\u003e117 \/ 46.1\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=\"0\" data-was=\"\" data-sizes='[\"US 2\",\"US 4\",\"US 6\",\"US 8\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Green Plaid\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/isla-womens-plaid-single-breasted-long-coat_f1_studio.jpg?v=1793709853\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:37.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=\"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":"Green Plaid \/ US 2","offer_id":61521319854414,"sku":"SLT1159-001","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Green Plaid \/ US 4","offer_id":61521319887182,"sku":"SLT1159-002","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Green Plaid \/ US 6","offer_id":61521319919950,"sku":"SLT1159-003","price":56.99,"currency_code":"USD","in_stock":true},{"title":"Green Plaid \/ US 8","offer_id":61521319952718,"sku":"SLT1159-004","price":56.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/isla-womens-plaid-single-breasted-long-coat_f1_studio.jpg?v=1793709853"},{"product_id":"lisette-hooded-asymmetric-zip-coat","title":"Lisette - Hooded Asymmetric 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 Fitted Hooded Coat With an Edge\u003c\/h2\u003e\n\u003cp\u003eLisette is a fitted coat in a warm, flecked fabric that falls to the upper thigh. A zip runs on the diagonal from the collar to the hem, and the shoulders and upper sleeves are panelled in diamond quilted smooth faux material for a sharp, moto inspired line.\u003c\/p\u003e\n\u003cp\u003eTwo short zips sit across the chest as a detail, and two piped pockets at the hips keep your hands warm. The hood is lined with soft quilting. Wear it with slim jeans and ankle boots, or over a knit dress. Gentle machine wash cold, lay flat 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\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eSize\u003c\/th\u003e\n\u003cth\u003eBust (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eWaist (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\u003e90 \/ 35.4\u003c\/td\u003e\n\u003ctd\u003e72 \/ 28.3\u003c\/td\u003e\n\u003ctd\u003e38 \/ 15.0\u003c\/td\u003e\n\u003ctd\u003e59 \/ 23.2\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eM\u003c\/td\u003e\n\u003ctd\u003e94 \/ 37.0\u003c\/td\u003e\n\u003ctd\u003e76 \/ 29.9\u003c\/td\u003e\n\u003ctd\u003e39 \/ 15.4\u003c\/td\u003e\n\u003ctd\u003e60 \/ 23.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eL\u003c\/td\u003e\n\u003ctd\u003e98 \/ 38.6\u003c\/td\u003e\n\u003ctd\u003e80 \/ 31.5\u003c\/td\u003e\n\u003ctd\u003e40 \/ 15.7\u003c\/td\u003e\n\u003ctd\u003e61 \/ 24.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eXL\u003c\/td\u003e\n\u003ctd\u003e102 \/ 40.2\u003c\/td\u003e\n\u003ctd\u003e84 \/ 33.1\u003c\/td\u003e\n\u003ctd\u003e41 \/ 16.1\u003c\/td\u003e\n\u003ctd\u003e62 \/ 24.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2XL\u003c\/td\u003e\n\u003ctd\u003e106 \/ 41.7\u003c\/td\u003e\n\u003ctd\u003e88 \/ 34.6\u003c\/td\u003e\n\u003ctd\u003e42 \/ 16.5\u003c\/td\u003e\n\u003ctd\u003e63 \/ 24.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3XL\u003c\/td\u003e\n\u003ctd\u003e110 \/ 43.3\u003c\/td\u003e\n\u003ctd\u003e92 \/ 36.2\u003c\/td\u003e\n\u003ctd\u003e43 \/ 16.9\u003c\/td\u003e\n\u003ctd\u003e64 \/ 25.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. 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=\"0\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Light Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/vera-womens-hooded-asymmetric-zip-coat-with-quilted-shoulders_f1_studio.jpg?v=1793709856\u0026amp;width=96\"},{\"v\":\"Dark Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/vera-womens-hooded-asymmetric-zip-coat-with-quilted-shoulders_c_dark-gray_studio.jpg?v=1793709856\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/vera-womens-hooded-asymmetric-zip-coat-with-quilted-shoulders_c_black_studio.jpg?v=1793709856\u0026amp;width=96\"},{\"v\":\"Wine Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/vera-womens-hooded-asymmetric-zip-coat-with-quilted-shoulders_c_wine-red_studio.jpg?v=1793709856\u0026amp;width=96\"},{\"v\":\"Navy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/vera-womens-hooded-asymmetric-zip-coat-with-quilted-shoulders_c_navy_studio.jpg?v=1793709856\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:33.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":"Light Gray \/ S","offer_id":61521320608078,"sku":"SLT1161-001","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Light Gray \/ M","offer_id":61521320640846,"sku":"SLT1161-002","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Light Gray \/ L","offer_id":61521320673614,"sku":"SLT1161-003","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Light Gray \/ XL","offer_id":61521320706382,"sku":"SLT1161-004","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Light Gray \/ 2XL","offer_id":61521320739150,"sku":"SLT1161-005","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Light Gray \/ 3XL","offer_id":61521320771918,"sku":"SLT1161-006","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Dark Gray \/ S","offer_id":61521320804686,"sku":"SLT1161-007","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Dark Gray \/ M","offer_id":61521320837454,"sku":"SLT1161-008","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Dark Gray \/ L","offer_id":61521320870222,"sku":"SLT1161-009","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Dark Gray \/ XL","offer_id":61521320902990,"sku":"SLT1161-010","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Dark Gray \/ 2XL","offer_id":61521320935758,"sku":"SLT1161-011","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Dark Gray \/ 3XL","offer_id":61521320968526,"sku":"SLT1161-012","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521321001294,"sku":"SLT1161-013","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521321034062,"sku":"SLT1161-014","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521321066830,"sku":"SLT1161-015","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521321099598,"sku":"SLT1161-016","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":61521321132366,"sku":"SLT1161-017","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":61521321165134,"sku":"SLT1161-018","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ S","offer_id":61521321197902,"sku":"SLT1161-019","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ M","offer_id":61521321230670,"sku":"SLT1161-020","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ L","offer_id":61521321263438,"sku":"SLT1161-021","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ XL","offer_id":61521321296206,"sku":"SLT1161-022","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ 2XL","offer_id":61521321328974,"sku":"SLT1161-023","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Wine Red \/ 3XL","offer_id":61521321361742,"sku":"SLT1161-024","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ S","offer_id":61521321394510,"sku":"SLT1161-025","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ M","offer_id":61521321427278,"sku":"SLT1161-026","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ L","offer_id":61521321460046,"sku":"SLT1161-027","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ XL","offer_id":61521321492814,"sku":"SLT1161-028","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ 2XL","offer_id":61521321525582,"sku":"SLT1161-029","price":91.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ 3XL","offer_id":61521321558350,"sku":"SLT1161-030","price":91.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/vera-womens-hooded-asymmetric-zip-coat-with-quilted-shoulders_f1_studio.jpg?v=1793709856"},{"product_id":"marnie-stand-collar-button-front-coat","title":"Marnie - Stand Collar Button-Front 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\u003eClean Lines and a Neat Stand Collar\u003c\/h2\u003e\n\u003cp\u003eMarnie is a neatly shaped coat that ends at mid thigh, made from a soft, brushed fabric with a smooth finish. A small stand collar frames the neck, and three large covered buttons close the front for a calm, polished look.\u003c\/p\u003e\n\u003cp\u003ePrincess seams shape the waist and let the hem flare gently, and two pockets sit hidden in the side seams. It works buttoned over a dress for the office, or open over a white top and jeans on the weekend. Five colours: cream, camel, black, grey and red. Gentle machine wash cold, lay flat to dry.\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=\"0\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Cream\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/clara-womens-stand-collar-button-front-coat_c_cream_studio.jpg?v=1793709857\u0026amp;width=96\"},{\"v\":\"Camel\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/clara-womens-stand-collar-button-front-coat_f1_studio.jpg?v=1793709857\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/clara-womens-stand-collar-button-front-coat_c_black_studio.jpg?v=1793709857\u0026amp;width=96\"},{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/clara-womens-stand-collar-button-front-coat_c_gray_studio.jpg?v=1793709857\u0026amp;width=96\"},{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/clara-womens-stand-collar-button-front-coat_c_red_studio.jpg?v=1793709858\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":61521321886030,"sku":"SLT1162-001","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Cream \/ M","offer_id":61521321918798,"sku":"SLT1162-002","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Cream \/ L","offer_id":61521321951566,"sku":"SLT1162-003","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Cream \/ XL","offer_id":61521321984334,"sku":"SLT1162-004","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ S","offer_id":61521322017102,"sku":"SLT1162-005","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ M","offer_id":61521322049870,"sku":"SLT1162-006","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ L","offer_id":61521322082638,"sku":"SLT1162-007","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ XL","offer_id":61521322115406,"sku":"SLT1162-008","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521322148174,"sku":"SLT1162-009","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521322180942,"sku":"SLT1162-010","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521322213710,"sku":"SLT1162-011","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521322246478,"sku":"SLT1162-012","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ S","offer_id":61521322279246,"sku":"SLT1162-013","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ M","offer_id":61521322312014,"sku":"SLT1162-014","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ L","offer_id":61521322344782,"sku":"SLT1162-015","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ XL","offer_id":61521322377550,"sku":"SLT1162-016","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ S","offer_id":61521322410318,"sku":"SLT1162-017","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ M","offer_id":61521322443086,"sku":"SLT1162-018","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ L","offer_id":61521322475854,"sku":"SLT1162-019","price":49.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XL","offer_id":61521322508622,"sku":"SLT1162-020","price":49.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/clara-womens-stand-collar-button-front-coat_f1_studio.jpg?v=1793709857"},{"product_id":"nicolette-quilted-hooded-jacket","title":"Nicolette - Quilted 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 Shaped Quilted Jacket With a Snug Hood\u003c\/h2\u003e\n\u003cp\u003eNicolette is a hip length quilted jacket with a shaped waist and a deep hood with a soft, fluffy brown lining all the way round. A high collar fastens with snaps under the chin, and the front closes with a zip and a snap placket over it.\u003c\/p\u003e\n\u003cp\u003eTwo slanted zip pockets sit at the hips, a small zip pocket rides on the left sleeve, and knit cuffs inside the sleeves keep the wind out at the wrist. Wear it with jeans and boots for walks, errands and the school run. Six colours: beige, black, olive, navy, red and pink. Gentle machine wash cold, 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=\"0\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\",\"4XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Beige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ingrid-womens-quilted-hooded-jacket-with-lined-hood_c_beige_studio.jpg?v=1793709859\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ingrid-womens-quilted-hooded-jacket-with-lined-hood_f1_studio.jpg?v=1793709859\u0026amp;width=96\"},{\"v\":\"Olive\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ingrid-womens-quilted-hooded-jacket-with-lined-hood_c_olive_studio.jpg?v=1793709859\u0026amp;width=96\"},{\"v\":\"Navy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ingrid-womens-quilted-hooded-jacket-with-lined-hood_c_navy_studio.jpg?v=1793709859\u0026amp;width=96\"},{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ingrid-womens-quilted-hooded-jacket-with-lined-hood_c_red_studio.jpg?v=1793709859\u0026amp;width=96\"},{\"v\":\"Pink\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ingrid-womens-quilted-hooded-jacket-with-lined-hood_c_pink_studio.jpg?v=1793709859\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":61521322606926,"sku":"SLT1163-001","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ S","offer_id":61521322639694,"sku":"SLT1163-002","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ M","offer_id":61521322672462,"sku":"SLT1163-003","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ L","offer_id":61521322705230,"sku":"SLT1163-004","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ XL","offer_id":61521322737998,"sku":"SLT1163-005","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 2XL","offer_id":61521322770766,"sku":"SLT1163-006","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 3XL","offer_id":61521322803534,"sku":"SLT1163-007","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 4XL","offer_id":61521322836302,"sku":"SLT1163-008","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XS","offer_id":61521322869070,"sku":"SLT1163-009","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521322901838,"sku":"SLT1163-010","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521322934606,"sku":"SLT1163-011","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521322967374,"sku":"SLT1163-012","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521323000142,"sku":"SLT1163-013","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":61521323032910,"sku":"SLT1163-014","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":61521323065678,"sku":"SLT1163-015","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 4XL","offer_id":61521323098446,"sku":"SLT1163-016","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Olive \/ XS","offer_id":61521323131214,"sku":"SLT1163-017","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Olive \/ S","offer_id":61521323163982,"sku":"SLT1163-018","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Olive \/ M","offer_id":61521323196750,"sku":"SLT1163-019","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Olive \/ L","offer_id":61521323229518,"sku":"SLT1163-020","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Olive \/ XL","offer_id":61521323262286,"sku":"SLT1163-021","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Olive \/ 2XL","offer_id":61521323295054,"sku":"SLT1163-022","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Olive \/ 3XL","offer_id":61521323327822,"sku":"SLT1163-023","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Olive \/ 4XL","offer_id":61521323360590,"sku":"SLT1163-024","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ XS","offer_id":61521323393358,"sku":"SLT1163-025","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ S","offer_id":61521323426126,"sku":"SLT1163-026","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ M","offer_id":61521323458894,"sku":"SLT1163-027","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ L","offer_id":61521323491662,"sku":"SLT1163-028","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ XL","offer_id":61521323524430,"sku":"SLT1163-029","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ 2XL","offer_id":61521323557198,"sku":"SLT1163-030","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ 3XL","offer_id":61521323589966,"sku":"SLT1163-031","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Navy \/ 4XL","offer_id":61521323622734,"sku":"SLT1163-032","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XS","offer_id":61521323655502,"sku":"SLT1163-033","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ S","offer_id":61521323688270,"sku":"SLT1163-034","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ M","offer_id":61521323721038,"sku":"SLT1163-035","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ L","offer_id":61521323753806,"sku":"SLT1163-036","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XL","offer_id":61521323786574,"sku":"SLT1163-037","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 2XL","offer_id":61521323819342,"sku":"SLT1163-038","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 3XL","offer_id":61521323852110,"sku":"SLT1163-039","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 4XL","offer_id":61521323884878,"sku":"SLT1163-040","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ XS","offer_id":61521323917646,"sku":"SLT1163-041","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ S","offer_id":61521323950414,"sku":"SLT1163-042","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ M","offer_id":61521323983182,"sku":"SLT1163-043","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ L","offer_id":61521324015950,"sku":"SLT1163-044","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ XL","offer_id":61521324048718,"sku":"SLT1163-045","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ 2XL","offer_id":61521324081486,"sku":"SLT1163-046","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ 3XL","offer_id":61521324114254,"sku":"SLT1163-047","price":64.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ 4XL","offer_id":61521324147022,"sku":"SLT1163-048","price":64.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ingrid-womens-quilted-hooded-jacket-with-lined-hood_f1_studio.jpg?v=1793709859"},{"product_id":"rosetta-double-breasted-belted-coat","title":"Rosetta - Double-Breasted Belted 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 Bold Red Coat With a Belted Waist\u003c\/h2\u003e\n\u003cp\u003eRosetta is a double breasted coat in a vivid red, with two rows of dark buttons and a tall stand collar that frames the face. A tie belt with a buckle cinches the waist, so the coat skims the body and flares a little below.\u003c\/p\u003e\n\u003cp\u003eFlap pockets sit at the hips and small buttoned tabs finish the cuffs. It falls to the knee and looks just as good over a knit dress as over slim trousers and boots. Dry clean or gentle hand wash cold, lay flat 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\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eSize\u003c\/th\u003e\n\u003cth\u003eShoulder (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eBust (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\u003e40.0 \/ 15.75\u003c\/td\u003e\n\u003ctd\u003e100.0 \/ 39.37\u003c\/td\u003e\n\u003ctd\u003e121.0 \/ 47.64\u003c\/td\u003e\n\u003ctd\u003e60.0 \/ 23.62\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eM\u003c\/td\u003e\n\u003ctd\u003e41.0 \/ 16.14\u003c\/td\u003e\n\u003ctd\u003e105.0 \/ 41.34\u003c\/td\u003e\n\u003ctd\u003e122.0 \/ 48.03\u003c\/td\u003e\n\u003ctd\u003e61.0 \/ 24.02\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eL\u003c\/td\u003e\n\u003ctd\u003e42.0 \/ 16.54\u003c\/td\u003e\n\u003ctd\u003e110.0 \/ 43.31\u003c\/td\u003e\n\u003ctd\u003e123.0 \/ 48.43\u003c\/td\u003e\n\u003ctd\u003e62.0 \/ 24.41\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eXL\u003c\/td\u003e\n\u003ctd\u003e43.0 \/ 16.93\u003c\/td\u003e\n\u003ctd\u003e115.0 \/ 45.28\u003c\/td\u003e\n\u003ctd\u003e124.0 \/ 48.82\u003c\/td\u003e\n\u003ctd\u003e63.0 \/ 24.80\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2XL\u003c\/td\u003e\n\u003ctd\u003e44.0 \/ 17.32\u003c\/td\u003e\n\u003ctd\u003e120.0 \/ 47.24\u003c\/td\u003e\n\u003ctd\u003e125.0 \/ 49.21\u003c\/td\u003e\n\u003ctd\u003e64.0 \/ 25.20\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3XL\u003c\/td\u003e\n\u003ctd\u003e45.0 \/ 17.72\u003c\/td\u003e\n\u003ctd\u003e125.0 \/ 49.21\u003c\/td\u003e\n\u003ctd\u003e126.0 \/ 49.61\u003c\/td\u003e\n\u003ctd\u003e65.0 \/ 25.59\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=\"0\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rosamund-womens-double-breasted-belted-coat-with-stand-collar_f1_studio.jpg?v=1793709860\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:45.2%\"\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":"Red \/ S","offer_id":61521324376398,"sku":"SLT1164-001","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ M","offer_id":61521324409166,"sku":"SLT1164-002","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ L","offer_id":61521324441934,"sku":"SLT1164-003","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XL","offer_id":61521324474702,"sku":"SLT1164-004","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 2XL","offer_id":61521324507470,"sku":"SLT1164-005","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 3XL","offer_id":61521324540238,"sku":"SLT1164-006","price":59.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rosamund-womens-double-breasted-belted-coat-with-stand-collar_f1_studio.jpg?v=1793709860"},{"product_id":"marianne-funnel-collar-button-front-coat","title":"Marianne - Funnel Collar Button-Front 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 Coat With a Collar That Buttons Up High\u003c\/h2\u003e\n\u003cp\u003eMarianne is a long, single breasted coat with a tall funnel collar that buttons right up to the chin. One row of dark buttons runs the length of the front, and the cut is clean and close through the body.\u003c\/p\u003e\n\u003cp\u003eFlap pockets sit at the hips, a buckled tab at each side gives the waist a neat line, and buttoned tabs finish the cuffs. Wear it over a black knit and trousers for the office, or open over jeans. Three colours: camel, black and charcoal. Dry clean or gentle hand wash cold, lay flat 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\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eSize\u003c\/th\u003e\n\u003cth\u003eShoulder (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eBust (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\u003e40.0 \/ 15.75\u003c\/td\u003e\n\u003ctd\u003e100.0 \/ 39.37\u003c\/td\u003e\n\u003ctd\u003e121.0 \/ 47.64\u003c\/td\u003e\n\u003ctd\u003e60.0 \/ 23.62\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eM\u003c\/td\u003e\n\u003ctd\u003e41.0 \/ 16.14\u003c\/td\u003e\n\u003ctd\u003e105.0 \/ 41.34\u003c\/td\u003e\n\u003ctd\u003e122.0 \/ 48.03\u003c\/td\u003e\n\u003ctd\u003e61.0 \/ 24.02\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eL\u003c\/td\u003e\n\u003ctd\u003e42.0 \/ 16.54\u003c\/td\u003e\n\u003ctd\u003e110.0 \/ 43.31\u003c\/td\u003e\n\u003ctd\u003e123.0 \/ 48.43\u003c\/td\u003e\n\u003ctd\u003e62.0 \/ 24.41\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eXL\u003c\/td\u003e\n\u003ctd\u003e43.0 \/ 16.93\u003c\/td\u003e\n\u003ctd\u003e115.0 \/ 45.28\u003c\/td\u003e\n\u003ctd\u003e124.0 \/ 48.82\u003c\/td\u003e\n\u003ctd\u003e63.0 \/ 24.80\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2XL\u003c\/td\u003e\n\u003ctd\u003e44.0 \/ 17.32\u003c\/td\u003e\n\u003ctd\u003e120.0 \/ 47.24\u003c\/td\u003e\n\u003ctd\u003e125.0 \/ 49.21\u003c\/td\u003e\n\u003ctd\u003e64.0 \/ 25.20\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3XL\u003c\/td\u003e\n\u003ctd\u003e45.0 \/ 17.72\u003c\/td\u003e\n\u003ctd\u003e125.0 \/ 49.21\u003c\/td\u003e\n\u003ctd\u003e126.0 \/ 49.61\u003c\/td\u003e\n\u003ctd\u003e65.0 \/ 25.59\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=\"0\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Camel\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/henriette-womens-funnel-collar-button-front-coat_f1_studio.jpg?v=1793709861\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/henriette-womens-funnel-collar-button-front-coat_c_black_studio.jpg?v=1793709861\u0026amp;width=96\"},{\"v\":\"Charcoal\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/henriette-womens-funnel-collar-button-front-coat_c_charcoal_studio.jpg?v=1793709861\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:45.2%\"\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":"Camel \/ S","offer_id":61521324671310,"sku":"SLT1165-001","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ M","offer_id":61521324704078,"sku":"SLT1165-002","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ L","offer_id":61521324736846,"sku":"SLT1165-003","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ XL","offer_id":61521324769614,"sku":"SLT1165-004","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ 2XL","offer_id":61521324802382,"sku":"SLT1165-005","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ 3XL","offer_id":61521324835150,"sku":"SLT1165-006","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521324867918,"sku":"SLT1165-007","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521324900686,"sku":"SLT1165-008","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521324933454,"sku":"SLT1165-009","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521324966222,"sku":"SLT1165-010","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":61521324998990,"sku":"SLT1165-011","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":61521325031758,"sku":"SLT1165-012","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Charcoal \/ S","offer_id":61521325064526,"sku":"SLT1165-013","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Charcoal \/ M","offer_id":61521325097294,"sku":"SLT1165-014","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Charcoal \/ L","offer_id":61521325130062,"sku":"SLT1165-015","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Charcoal \/ XL","offer_id":61521325162830,"sku":"SLT1165-016","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Charcoal \/ 2XL","offer_id":61521325195598,"sku":"SLT1165-017","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Charcoal \/ 3XL","offer_id":61521325228366,"sku":"SLT1165-018","price":59.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/henriette-womens-funnel-collar-button-front-coat_f1_studio.jpg?v=1793709861"},{"product_id":"lorelle-southwestern-pattern-relaxed-coat","title":"Lorelle - Southwestern Pattern Relaxed 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 Patterned Coat for Cooler Weather\u003c\/h2\u003e\n\u003cp\u003eLorelle is a relaxed coat in a warm, soft textile with a striking southwestern pattern. It keeps you warm while staying breathable, which makes it easy to layer in cooler weather.\u003c\/p\u003e\n\u003cp\u003eThe relaxed fit leaves room for a jumper underneath, and the pattern does the styling for you. Two colourways: beige navy and obsidian black. Machine wash cold, tumble dry low.\u003c\/p\u003e\n\u003cp\u003eSized XS 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=\"0\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Beige Navy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Classic-Wool-Coat-Women-with-Southwestern-Patterns-7785.jpg?v=1793737707\u0026amp;width=96\"},{\"v\":\"Obsidian Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Classic-Wool-Coat-Women-with-Southwestern-Patterns-0.jpg?v=1793737707\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 Navy \/ XS","offer_id":61521327620430,"sku":"SLT1169-001","price":72.99,"currency_code":"USD","in_stock":true},{"title":"Beige Navy \/ S","offer_id":61521327653198,"sku":"SLT1169-002","price":72.99,"currency_code":"USD","in_stock":true},{"title":"Beige Navy \/ M","offer_id":61521327685966,"sku":"SLT1169-003","price":72.99,"currency_code":"USD","in_stock":true},{"title":"Beige Navy \/ L","offer_id":61521327718734,"sku":"SLT1169-004","price":72.99,"currency_code":"USD","in_stock":true},{"title":"Beige Navy \/ XL","offer_id":61521327751502,"sku":"SLT1169-005","price":72.99,"currency_code":"USD","in_stock":true},{"title":"Beige Navy \/ 2XL","offer_id":61521327784270,"sku":"SLT1169-006","price":72.99,"currency_code":"USD","in_stock":true},{"title":"Beige Navy \/ 3XL","offer_id":61521327817038,"sku":"SLT1169-007","price":72.99,"currency_code":"USD","in_stock":true},{"title":"Obsidian Black \/ XS","offer_id":61521327849806,"sku":"SLT1169-008","price":72.99,"currency_code":"USD","in_stock":true},{"title":"Obsidian Black \/ S","offer_id":61521327882574,"sku":"SLT1169-009","price":72.99,"currency_code":"USD","in_stock":true},{"title":"Obsidian Black \/ M","offer_id":61521327915342,"sku":"SLT1169-010","price":72.99,"currency_code":"USD","in_stock":true},{"title":"Obsidian Black \/ L","offer_id":61521327948110,"sku":"SLT1169-011","price":72.99,"currency_code":"USD","in_stock":true},{"title":"Obsidian Black \/ XL","offer_id":61521327980878,"sku":"SLT1169-012","price":72.99,"currency_code":"USD","in_stock":true},{"title":"Obsidian Black \/ 2XL","offer_id":61521328013646,"sku":"SLT1169-013","price":72.99,"currency_code":"USD","in_stock":true},{"title":"Obsidian Black \/ 3XL","offer_id":61521328046414,"sku":"SLT1169-014","price":72.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Classic-Wool-Coat-Women-with-Southwestern-Patterns-0.jpg?v=1793737707"},{"product_id":"pauline-vintage-padded-straight-cut-jacket","title":"Pauline - Vintage Padded Straight-Cut 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 Vintage Padded Jacket for Chilly Days\u003c\/h2\u003e\n\u003cp\u003ePauline is a vintage padded jacket in a soft, durable textile. It has a straight cut and long sleeves for a comfortable fit that keeps you warm on chilly days.\u003c\/p\u003e\n\u003cp\u003eThe fabric is non-stretch, so the shape stays clean and structured. Two colours: apricot and brown. Gentle machine wash, and separate dark and light colours.\u003c\/p\u003e\n\u003cp\u003eSized L to S.\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=\"0\" data-was=\"\" data-sizes='[\"L\",\"XL\",\"M\",\"S\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"apricot parkas\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/hanna-stylish-quilted-winter-jacket-for-women_f1_studio.jpg?v=1793709868\u0026amp;width=96\"},{\"v\":\"brown parkas\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/hanna-stylish-quilted-winter-jacket-for-women_c_brown-parkas_studio.jpg?v=1793709868\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":"apricot parkas \/ L","offer_id":61521328144718,"sku":"SLT1170-001","price":92.99,"currency_code":"USD","in_stock":true},{"title":"brown parkas \/ XL","offer_id":61521328177486,"sku":"SLT1170-002","price":92.99,"currency_code":"USD","in_stock":true},{"title":"apricot parkas \/ XL","offer_id":61521328210254,"sku":"SLT1170-003","price":92.99,"currency_code":"USD","in_stock":true},{"title":"apricot parkas \/ M","offer_id":61521328243022,"sku":"SLT1170-004","price":92.99,"currency_code":"USD","in_stock":true},{"title":"brown parkas \/ M","offer_id":61521328275790,"sku":"SLT1170-005","price":92.99,"currency_code":"USD","in_stock":true},{"title":"apricot parkas \/ S","offer_id":61521328308558,"sku":"SLT1170-006","price":92.99,"currency_code":"USD","in_stock":true},{"title":"brown parkas \/ S","offer_id":61521328341326,"sku":"SLT1170-007","price":92.99,"currency_code":"USD","in_stock":true},{"title":"brown parkas \/ L","offer_id":61521328374094,"sku":"SLT1170-008","price":92.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/hanna-stylish-quilted-winter-jacket-for-women_f1_studio.jpg?v=1793709868"},{"product_id":"nuala-double-breasted-swing-jacket","title":"Nuala - Double-Breasted 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 Double-Breasted Swing Jacket With a Flattering Shape\u003c\/h2\u003e\n\u003cp\u003eNuala is a swing jacket in a soft brushed textile, designed to give a flattering silhouette. A collarless stand neckline and a double-breasted front keep it clean and simple.\u003c\/p\u003e\n\u003cp\u003eIt is hip length with a relaxed fit, and horn-look buttons close the front. Four colours: brown, grey, black and khaki. Easy to maintain and clean.\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=\"0\" 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\/imogen-elegant-double-breasted-swing-jacket_f1_studio.jpg?v=1793709880\u0026amp;width=96\"},{\"v\":\"Grey\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/imogen-elegant-double-breasted-swing-jacket_c_grey_studio.jpg?v=1793709880\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/imogen-elegant-double-breasted-swing-jacket_c_black_studio.jpg?v=1793709880\u0026amp;width=96\"},{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/imogen-elegant-double-breasted-swing-jacket_c_khaki_studio.jpg?v=1793709880\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 \/ XS","offer_id":61521335189838,"sku":"SLT1178-001","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S","offer_id":61521335222606,"sku":"SLT1178-002","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M","offer_id":61521335255374,"sku":"SLT1178-003","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L","offer_id":61521335288142,"sku":"SLT1178-004","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL","offer_id":61521335320910,"sku":"SLT1178-005","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ XS","offer_id":61521335353678,"sku":"SLT1178-006","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ S","offer_id":61521335386446,"sku":"SLT1178-007","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ M","offer_id":61521335419214,"sku":"SLT1178-008","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ L","offer_id":61521335451982,"sku":"SLT1178-009","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Grey \/ XL","offer_id":61521335484750,"sku":"SLT1178-010","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XS","offer_id":61521335517518,"sku":"SLT1178-011","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521335550286,"sku":"SLT1178-012","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521335583054,"sku":"SLT1178-013","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521335615822,"sku":"SLT1178-014","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521335648590,"sku":"SLT1178-015","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XS","offer_id":61521335681358,"sku":"SLT1178-016","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ S","offer_id":61521335714126,"sku":"SLT1178-017","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ M","offer_id":61521335746894,"sku":"SLT1178-018","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ L","offer_id":61521335779662,"sku":"SLT1178-019","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XL","offer_id":61521335812430,"sku":"SLT1178-020","price":111.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/imogen-elegant-double-breasted-swing-jacket_f1_studio.jpg?v=1793709880"},{"product_id":"odalie-cropped-soft-napped-moto-jacket","title":"Odalie - Cropped Soft Napped Moto 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 Moto Jacket With a Soft Napped Finish\u003c\/h2\u003e\n\u003cp\u003eOdalie is a cropped moto jacket in a soft napped faux finish, with a wide notch lapel and a functional zip front. It makes a versatile addition to a wardrobe of casual and smart pieces.\u003c\/p\u003e\n\u003cp\u003eThe cut is cropped, sitting below the natural waist, and a full-length zip closes the front. Five colours: khaki, black, green, pink and apricot. The zip front keeps the cropped line neat.\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=\"0\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/felicity-cropped-soft-napped-moto-jacket_f1_studio.jpg?v=1793709881\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/felicity-cropped-soft-napped-moto-jacket_c_black_studio.jpg?v=1793709881\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/felicity-cropped-soft-napped-moto-jacket_c_green_studio.jpg?v=1793709881\u0026amp;width=96\"},{\"v\":\"Pink\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/felicity-cropped-soft-napped-moto-jacket_c_pink_studio.jpg?v=1793709880\u0026amp;width=96\"},{\"v\":\"Apricot\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/felicity-cropped-soft-napped-moto-jacket_c_apricot_studio.jpg?v=1793709881\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 \/ S","offer_id":61521336074574,"sku":"SLT1179-001","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ M","offer_id":61521336107342,"sku":"SLT1179-002","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ L","offer_id":61521336140110,"sku":"SLT1179-003","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XL","offer_id":61521336172878,"sku":"SLT1179-004","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 2XL","offer_id":61521336205646,"sku":"SLT1179-005","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521336238414,"sku":"SLT1179-006","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521336271182,"sku":"SLT1179-007","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521336303950,"sku":"SLT1179-008","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521336336718,"sku":"SLT1179-009","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":61521336369486,"sku":"SLT1179-010","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ S","offer_id":61521336402254,"sku":"SLT1179-011","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ M","offer_id":61521336435022,"sku":"SLT1179-012","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ L","offer_id":61521336467790,"sku":"SLT1179-013","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XL","offer_id":61521336500558,"sku":"SLT1179-014","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 2XL","offer_id":61521336533326,"sku":"SLT1179-015","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ S","offer_id":61521336566094,"sku":"SLT1179-016","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ M","offer_id":61521336598862,"sku":"SLT1179-017","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ L","offer_id":61521336631630,"sku":"SLT1179-018","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ XL","offer_id":61521336664398,"sku":"SLT1179-019","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ 2XL","offer_id":61521336697166,"sku":"SLT1179-020","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Apricot \/ S","offer_id":61521336729934,"sku":"SLT1179-021","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Apricot \/ M","offer_id":61521336762702,"sku":"SLT1179-022","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Apricot \/ L","offer_id":61521336795470,"sku":"SLT1179-023","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Apricot \/ XL","offer_id":61521336828238,"sku":"SLT1179-024","price":92.99,"currency_code":"USD","in_stock":true},{"title":"Apricot \/ 2XL","offer_id":61521336861006,"sku":"SLT1179-025","price":92.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/felicity-cropped-soft-napped-moto-jacket_f1_studio.jpg?v=1793709881"},{"product_id":"svea-oversized-hip-length-padded-jacket","title":"Svea - Oversized Hip-Length 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\u003eAn Oversized Short Jacket Made for Layering\u003c\/h2\u003e\n\u003cp\u003eSvea is an oversized, hip-length padded jacket made for layering through the colder months. The relaxed silhouette leaves room for a knit underneath and keeps the warmth in without feeling restrictive.\u003c\/p\u003e\n\u003cp\u003eMade from soft durable textile with a zipper closure, it comes in four colours: khaki, black, green and white. The hip length keeps the shape short and easy to wear day to day. Machine washable.\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=\"0\" 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\/Philippa_-_Stylish_Oversized_Puffer_Jacket_for_Women_0.webp?v=1793737712\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Philippa_-_Stylish_Oversized_Puffer_Jacket_for_Women_6.webp?v=1793740942\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Philippa_-_Stylish_Oversized_Puffer_Jacket_for_Women_7.webp?v=1793740942\u0026amp;width=96\"},{\"v\":\"White\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Philippa_-_Stylish_Oversized_Puffer_Jacket_for_Women_8.webp?v=1793740942\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 \/ XS","offer_id":61521337319758,"sku":"SLT1180-001","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ S","offer_id":61521337352526,"sku":"SLT1180-002","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ M","offer_id":61521337385294,"sku":"SLT1180-003","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ L","offer_id":61521337418062,"sku":"SLT1180-004","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ XL","offer_id":61521337450830,"sku":"SLT1180-005","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Khaki \/ 2XL","offer_id":61521337483598,"sku":"SLT1180-006","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XS","offer_id":61521337516366,"sku":"SLT1180-007","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521337549134,"sku":"SLT1180-008","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521337581902,"sku":"SLT1180-009","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521337614670,"sku":"SLT1180-010","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521337647438,"sku":"SLT1180-011","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":61521337680206,"sku":"SLT1180-012","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XS","offer_id":61521337712974,"sku":"SLT1180-013","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ S","offer_id":61521337745742,"sku":"SLT1180-014","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ M","offer_id":61521337778510,"sku":"SLT1180-015","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ L","offer_id":61521337811278,"sku":"SLT1180-016","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XL","offer_id":61521337844046,"sku":"SLT1180-017","price":111.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 2XL","offer_id":61521337876814,"sku":"SLT1180-018","price":111.99,"currency_code":"USD","in_stock":true},{"title":"White \/ XS","offer_id":61521337909582,"sku":"SLT1180-019","price":111.99,"currency_code":"USD","in_stock":true},{"title":"White \/ S","offer_id":61521337942350,"sku":"SLT1180-020","price":111.99,"currency_code":"USD","in_stock":true},{"title":"White \/ M","offer_id":61521337975118,"sku":"SLT1180-021","price":111.99,"currency_code":"USD","in_stock":true},{"title":"White \/ L","offer_id":61521338007886,"sku":"SLT1180-022","price":111.99,"currency_code":"USD","in_stock":true},{"title":"White \/ XL","offer_id":61521338040654,"sku":"SLT1180-023","price":111.99,"currency_code":"USD","in_stock":true},{"title":"White \/ 2XL","offer_id":61521338073422,"sku":"SLT1180-024","price":111.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Philippa_-_Stylish_Oversized_Puffer_Jacket_for_Women_0.webp?v=1793737712"},{"product_id":"thalia-soft-napped-long-sleeve-jacket","title":"Thalia - Soft Napped Long Sleeve 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 Long Sleeve Jacket for Every Occasion\u003c\/h2\u003e\n\u003cp\u003eThalia is a casual jacket in soft napped material and a rich deep burgundy tone. The long sleeves and clean silhouette make a polished seasonal layer that adds warmth and character to everyday outfits.\u003c\/p\u003e\n\u003cp\u003eIt has a regular fit and a stand collar neckline. Made for daily wear, office casual, shopping, brunches, travel, weekend outings and dates. The deep burgundy comes as a single colour.\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=\"0\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Deep Burgundy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Amelia_-_Stylish_Long_Sleeve_Suede_Jacket_0.webp?v=1793709883\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":"Deep Burgundy \/ XS","offer_id":61521338335566,"sku":"SLT1181-001","price":95.99,"currency_code":"USD","in_stock":true},{"title":"Deep Burgundy \/ S","offer_id":61521338368334,"sku":"SLT1181-002","price":95.99,"currency_code":"USD","in_stock":true},{"title":"Deep Burgundy \/ M","offer_id":61521338401102,"sku":"SLT1181-003","price":95.99,"currency_code":"USD","in_stock":true},{"title":"Deep Burgundy \/ L","offer_id":61521338433870,"sku":"SLT1181-004","price":95.99,"currency_code":"USD","in_stock":true},{"title":"Deep Burgundy \/ XL","offer_id":61521338466638,"sku":"SLT1181-005","price":95.99,"currency_code":"USD","in_stock":true},{"title":"Deep Burgundy \/ 2XL","offer_id":61521338499406,"sku":"SLT1181-006","price":95.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/Amelia_-_Stylish_Long_Sleeve_Suede_Jacket_0.webp?v=1793709883"},{"product_id":"verena-plush-stand-collar-zip-jacket","title":"Verena - Plush Stand-Collar 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 Plush Jacket for Ultimate Comfort\u003c\/h2\u003e\n\u003cp\u003eVerena is a soft, warm jacket with a deep-pile plush surface, a full-length zipper and a stand-up collar. It is made for everyday wear and gives reliable protection against chilly air.\u003c\/p\u003e\n\u003cp\u003eThe fit is relaxed, and front pockets with contrast details add a finishing touch. Made from warm plush textile. Four colours: grey, beige, dark brown and white.\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=\"0\" data-was=\"\" data-sizes='[\"8\/10 (S)\",\"10\/12 (M)\",\"12\/14 (L)\",\"14\/16 (XL)\",\"16\/18 (2XL)\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amara-cozy-womens-fleece-jacket-for-winter-wear_f1_studio.jpg?v=1793709886\u0026amp;width=96\"},{\"v\":\"Beige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amara-cozy-womens-fleece-jacket-for-winter-wear_c_beige_studio.jpg?v=1793709886\u0026amp;width=96\"},{\"v\":\"Dark Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amara-cozy-womens-fleece-jacket-for-winter-wear_c_dark-brown_studio.jpg?v=1793709886\u0026amp;width=96\"},{\"v\":\"White\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amara-cozy-womens-fleece-jacket-for-winter-wear_c_white_studio.jpg?v=1793709886\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 \/ 8\/10 (S)","offer_id":61521339285838,"sku":"SLT1183-001","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 10\/12 (M)","offer_id":61521339318606,"sku":"SLT1183-002","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 12\/14 (L)","offer_id":61521339351374,"sku":"SLT1183-003","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 14\/16 (XL)","offer_id":61521339384142,"sku":"SLT1183-004","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Gray \/ 16\/18 (2XL)","offer_id":61521339416910,"sku":"SLT1183-005","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 8\/10 (S)","offer_id":61521339449678,"sku":"SLT1183-006","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 10\/12 (M)","offer_id":61521339482446,"sku":"SLT1183-007","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 12\/14 (L)","offer_id":61521339515214,"sku":"SLT1183-008","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 14\/16 (XL)","offer_id":61521339547982,"sku":"SLT1183-009","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 16\/18 (2XL)","offer_id":61521339580750,"sku":"SLT1183-010","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Dark Brown \/ 8\/10 (S)","offer_id":61521339613518,"sku":"SLT1183-011","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Dark Brown \/ 10\/12 (M)","offer_id":61521339646286,"sku":"SLT1183-012","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Dark Brown \/ 12\/14 (L)","offer_id":61521339679054,"sku":"SLT1183-013","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Dark Brown \/ 14\/16 (XL)","offer_id":61521339711822,"sku":"SLT1183-014","price":50.99,"currency_code":"USD","in_stock":true},{"title":"Dark Brown \/ 16\/18 (2XL)","offer_id":61521339744590,"sku":"SLT1183-015","price":50.99,"currency_code":"USD","in_stock":true},{"title":"White \/ 8\/10 (S)","offer_id":61521339777358,"sku":"SLT1183-016","price":50.99,"currency_code":"USD","in_stock":true},{"title":"White \/ 10\/12 (M)","offer_id":61521339810126,"sku":"SLT1183-017","price":50.99,"currency_code":"USD","in_stock":true},{"title":"White \/ 12\/14 (L)","offer_id":61521339842894,"sku":"SLT1183-018","price":50.99,"currency_code":"USD","in_stock":true},{"title":"White \/ 14\/16 (XL)","offer_id":61521339875662,"sku":"SLT1183-019","price":50.99,"currency_code":"USD","in_stock":true},{"title":"White \/ 16\/18 (2XL)","offer_id":61521339908430,"sku":"SLT1183-020","price":50.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/amara-cozy-womens-fleece-jacket-for-winter-wear_f1_studio.jpg?v=1793709886"},{"product_id":"willow-water-resistant-hooded-jacket","title":"Willow - Water-Resistant 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 Rain-Ready Hooded Jacket That Keeps the Cold Out\u003c\/h2\u003e\n\u003cp\u003eWillow is a straight-cut jacket with a water-resistant shell, a high collar lined in a warm plush textile and a detachable hood you can tighten with a drawcord. It is built for windy commutes and unsettled weather.\u003c\/p\u003e\n\u003cp\u003eTwo zip pockets at the front and a third on the sleeve keep your phone and keys secure. A drawcord waist and hook-and-loop cuffs close out draughts. Ten colours, from black and navy to lavender and pink. Machine wash cold, gentle cycle, tumble dry low.\u003c\/p\u003e\n\u003cp\u003eSized 4-6 to 24. 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\u003eBust (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eLength (cm \/ in)\u003c\/th\u003e\n\u003cth\u003eSleeve (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(4-6)\u003c\/td\u003e\n\u003ctd\u003e115 \/ 45.3\u003c\/td\u003e\n\u003ctd\u003e98 \/ 38.6\u003c\/td\u003e\n\u003ctd\u003e60 \/ 23.6\u003c\/td\u003e\n\u003ctd\u003e38 \/ 15.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eM(8-10)\u003c\/td\u003e\n\u003ctd\u003e120 \/ 47.2\u003c\/td\u003e\n\u003ctd\u003e100 \/ 39.4\u003c\/td\u003e\n\u003ctd\u003e61 \/ 24.0\u003c\/td\u003e\n\u003ctd\u003e39.5 \/ 15.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eL(12-14)\u003c\/td\u003e\n\u003ctd\u003e127 \/ 50.0\u003c\/td\u003e\n\u003ctd\u003e102 \/ 40.2\u003c\/td\u003e\n\u003ctd\u003e62 \/ 24.4\u003c\/td\u003e\n\u003ctd\u003e41 \/ 16.1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eXL(16)\u003c\/td\u003e\n\u003ctd\u003e135 \/ 53.1\u003c\/td\u003e\n\u003ctd\u003e104 \/ 40.9\u003c\/td\u003e\n\u003ctd\u003e63 \/ 24.8\u003c\/td\u003e\n\u003ctd\u003e42.5 \/ 16.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2XL(18)\u003c\/td\u003e\n\u003ctd\u003e140 \/ 55.1\u003c\/td\u003e\n\u003ctd\u003e106 \/ 41.7\u003c\/td\u003e\n\u003ctd\u003e64 \/ 25.2\u003c\/td\u003e\n\u003ctd\u003e44 \/ 17.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3XL(20)\u003c\/td\u003e\n\u003ctd\u003e145 \/ 57.1\u003c\/td\u003e\n\u003ctd\u003e108 \/ 42.5\u003c\/td\u003e\n\u003ctd\u003e65 \/ 25.6\u003c\/td\u003e\n\u003ctd\u003e45.5 \/ 17.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e4XL(22)\u003c\/td\u003e\n\u003ctd\u003e150 \/ 59.1\u003c\/td\u003e\n\u003ctd\u003e110 \/ 43.3\u003c\/td\u003e\n\u003ctd\u003e66 \/ 26.0\u003c\/td\u003e\n\u003ctd\u003e47 \/ 18.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5XL(24)\u003c\/td\u003e\n\u003ctd\u003e155 \/ 61.0\u003c\/td\u003e\n\u003ctd\u003e112 \/ 44.1\u003c\/td\u003e\n\u003ctd\u003e67 \/ 26.4\u003c\/td\u003e\n\u003ctd\u003e48.5 \/ 19.1\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=\"0\" data-was=\"\" data-sizes='[\"S(4-6)\",\"M(8-10)\",\"L(12-14)\",\"XL(16)\",\"2XL(18)\",\"3XL(20)\",\"4XL(22)\",\"5XL(24)\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/layla-water-resistant-hooded-jacket-with-warm-lining_f1_studio.jpg?v=1793709889\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/layla-water-resistant-hooded-jacket-with-warm-lining_c_green_studio.jpg?v=1793709890\u0026amp;width=96\"},{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/layla-water-resistant-hooded-jacket-with-warm-lining_c_red_studio.jpg?v=1793709889\u0026amp;width=96\"},{\"v\":\"Pink\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/layla-water-resistant-hooded-jacket-with-warm-lining_c_pink_studio.jpg?v=1793709889\u0026amp;width=96\"},{\"v\":\"Purple\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/layla-water-resistant-hooded-jacket-with-warm-lining_c_purple_studio.jpg?v=1793709890\u0026amp;width=96\"},{\"v\":\"Beige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/layla-water-resistant-hooded-jacket-with-warm-lining_c_beige_studio.jpg?v=1793709889\u0026amp;width=96\"},{\"v\":\"Dark Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/layla-water-resistant-hooded-jacket-with-warm-lining_c_dark-green_studio.jpg?v=1793709890\u0026amp;width=96\"},{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/layla-water-resistant-hooded-jacket-with-warm-lining_c_brown_studio.jpg?v=1793709889\u0026amp;width=96\"},{\"v\":\"Navy Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/layla-water-resistant-hooded-jacket-with-warm-lining_c_navy-blue_studio.jpg?v=1793709889\u0026amp;width=96\"},{\"v\":\"Lavender\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/layla-water-resistant-hooded-jacket-with-warm-lining_c_lavender_studio.jpg?v=1793709889\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:92.2%\"\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(4-6)","offer_id":61521341710670,"sku":"SLT1185-001","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M(8-10)","offer_id":61521341743438,"sku":"SLT1185-002","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L(12-14)","offer_id":61521341776206,"sku":"SLT1185-003","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL(16)","offer_id":61521341808974,"sku":"SLT1185-004","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL(18)","offer_id":61521341841742,"sku":"SLT1185-005","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL(20)","offer_id":61521341874510,"sku":"SLT1185-006","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 4XL(22)","offer_id":61521341907278,"sku":"SLT1185-007","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 5XL(24)","offer_id":61521341940046,"sku":"SLT1185-008","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ S(4-6)","offer_id":61521341972814,"sku":"SLT1185-009","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ M(8-10)","offer_id":61521342005582,"sku":"SLT1185-010","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ L(12-14)","offer_id":61521342038350,"sku":"SLT1185-011","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ XL(16)","offer_id":61521342071118,"sku":"SLT1185-012","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 2XL(18)","offer_id":61521342103886,"sku":"SLT1185-013","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 3XL(20)","offer_id":61521342136654,"sku":"SLT1185-014","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 4XL(22)","offer_id":61521342169422,"sku":"SLT1185-015","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Green \/ 5XL(24)","offer_id":61521342202190,"sku":"SLT1185-016","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ S(4-6)","offer_id":61521342234958,"sku":"SLT1185-017","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ M(8-10)","offer_id":61521342267726,"sku":"SLT1185-018","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ L(12-14)","offer_id":61521342300494,"sku":"SLT1185-019","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ XL(16)","offer_id":61521342333262,"sku":"SLT1185-020","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 2XL(18)","offer_id":61521342366030,"sku":"SLT1185-021","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 3XL(20)","offer_id":61521342398798,"sku":"SLT1185-022","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 4XL(22)","offer_id":61521342431566,"sku":"SLT1185-023","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Red \/ 5XL(24)","offer_id":61521342464334,"sku":"SLT1185-024","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ S(4-6)","offer_id":61521342497102,"sku":"SLT1185-025","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ M(8-10)","offer_id":61521342529870,"sku":"SLT1185-026","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ L(12-14)","offer_id":61521342562638,"sku":"SLT1185-027","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ XL(16)","offer_id":61521342595406,"sku":"SLT1185-028","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ 2XL(18)","offer_id":61521342628174,"sku":"SLT1185-029","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ 3XL(20)","offer_id":61521342660942,"sku":"SLT1185-030","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ 4XL(22)","offer_id":61521342693710,"sku":"SLT1185-031","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Pink \/ 5XL(24)","offer_id":61521342726478,"sku":"SLT1185-032","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Purple \/ S(4-6)","offer_id":61521342759246,"sku":"SLT1185-033","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Purple \/ M(8-10)","offer_id":61521342792014,"sku":"SLT1185-034","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Purple \/ L(12-14)","offer_id":61521342824782,"sku":"SLT1185-035","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Purple \/ XL(16)","offer_id":61521342857550,"sku":"SLT1185-036","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Purple \/ 2XL(18)","offer_id":61521342890318,"sku":"SLT1185-037","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Purple \/ 3XL(20)","offer_id":61521342923086,"sku":"SLT1185-038","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Purple \/ 4XL(22)","offer_id":61521342955854,"sku":"SLT1185-039","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Purple \/ 5XL(24)","offer_id":61521342988622,"sku":"SLT1185-040","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ S(4-6)","offer_id":61521343021390,"sku":"SLT1185-041","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ M(8-10)","offer_id":61521343054158,"sku":"SLT1185-042","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ L(12-14)","offer_id":61521343086926,"sku":"SLT1185-043","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ XL(16)","offer_id":61521343119694,"sku":"SLT1185-044","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 2XL(18)","offer_id":61521343152462,"sku":"SLT1185-045","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 3XL(20)","offer_id":61521343185230,"sku":"SLT1185-046","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 4XL(22)","offer_id":61521343217998,"sku":"SLT1185-047","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Beige \/ 5XL(24)","offer_id":61521343250766,"sku":"SLT1185-048","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ S(4-6)","offer_id":61521343283534,"sku":"SLT1185-049","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ M(8-10)","offer_id":61521343316302,"sku":"SLT1185-050","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ L(12-14)","offer_id":61521343349070,"sku":"SLT1185-051","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ XL(16)","offer_id":61521343381838,"sku":"SLT1185-052","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ 2XL(18)","offer_id":61521343414606,"sku":"SLT1185-053","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ 3XL(20)","offer_id":61521343447374,"sku":"SLT1185-054","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ 4XL(22)","offer_id":61521343480142,"sku":"SLT1185-055","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Dark Green \/ 5XL(24)","offer_id":61521343512910,"sku":"SLT1185-056","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ S(4-6)","offer_id":61521343545678,"sku":"SLT1185-057","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ M(8-10)","offer_id":61521343578446,"sku":"SLT1185-058","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ L(12-14)","offer_id":61521343611214,"sku":"SLT1185-059","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ XL(16)","offer_id":61521343643982,"sku":"SLT1185-060","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 2XL(18)","offer_id":61521343676750,"sku":"SLT1185-061","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 3XL(20)","offer_id":61521343709518,"sku":"SLT1185-062","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 4XL(22)","offer_id":61521343742286,"sku":"SLT1185-063","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Brown \/ 5XL(24)","offer_id":61521343775054,"sku":"SLT1185-064","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ S(4-6)","offer_id":61521343807822,"sku":"SLT1185-065","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ M(8-10)","offer_id":61521343840590,"sku":"SLT1185-066","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ L(12-14)","offer_id":61521343873358,"sku":"SLT1185-067","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ XL(16)","offer_id":61521343906126,"sku":"SLT1185-068","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 2XL(18)","offer_id":61521343938894,"sku":"SLT1185-069","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 3XL(20)","offer_id":61521343971662,"sku":"SLT1185-070","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 4XL(22)","offer_id":61521344004430,"sku":"SLT1185-071","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Navy Blue \/ 5XL(24)","offer_id":61521344037198,"sku":"SLT1185-072","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Lavender \/ S(4-6)","offer_id":61521344069966,"sku":"SLT1185-073","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Lavender \/ M(8-10)","offer_id":61521344102734,"sku":"SLT1185-074","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Lavender \/ L(12-14)","offer_id":61521344135502,"sku":"SLT1185-075","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Lavender \/ XL(16)","offer_id":61521344168270,"sku":"SLT1185-076","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Lavender \/ 2XL(18)","offer_id":61521344201038,"sku":"SLT1185-077","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Lavender \/ 3XL(20)","offer_id":61521344233806,"sku":"SLT1185-078","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Lavender \/ 4XL(22)","offer_id":61521344266574,"sku":"SLT1185-079","price":129.99,"currency_code":"USD","in_stock":true},{"title":"Lavender \/ 5XL(24)","offer_id":61521344299342,"sku":"SLT1185-080","price":129.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/layla-water-resistant-hooded-jacket-with-warm-lining_f1_studio.jpg?v=1793709889"},{"product_id":"sidony-button-front-jacket-with-fringe-scarf","title":"Sidony - Button-Front Jacket With Fringe Scarf","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 Soft Brushed Jacket With a Fringed Scarf to Match\u003c\/h2\u003e\n\u003cp\u003eSidony is a boxy button-front jacket in rich chocolate brown with a soft brushed finish. It comes with a matching scarf that wraps the neck and ends in long fringe, so it arrives already styled. Take the scarf off and it is a clean, easy jacket on its own.\u003c\/p\u003e\n\u003cp\u003eFour horn-look buttons close the front, two patch pockets sit low, and dropped shoulders give an oversized shape that layers over a knit. Wear it with cream trousers and a small bag. Do not wash, mild 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\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eSize\u003c\/th\u003e\n\u003cth\u003eUS\u003c\/th\u003e\n\u003cth\u003eBust (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\u003eXS\u003c\/td\u003e\n\u003ctd\u003e2\u003c\/td\u003e\n\u003ctd\u003e116 \/ 45.7\u003c\/td\u003e\n\u003ctd\u003e71.3 \/ 28.1\u003c\/td\u003e\n\u003ctd\u003e59 \/ 23.2\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eS\u003c\/td\u003e\n\u003ctd\u003e4\u003c\/td\u003e\n\u003ctd\u003e120 \/ 47.2\u003c\/td\u003e\n\u003ctd\u003e72.5 \/ 28.5\u003c\/td\u003e\n\u003ctd\u003e60 \/ 23.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eM\u003c\/td\u003e\n\u003ctd\u003e6\u003c\/td\u003e\n\u003ctd\u003e124 \/ 48.8\u003c\/td\u003e\n\u003ctd\u003e73.7 \/ 29.0\u003c\/td\u003e\n\u003ctd\u003e61 \/ 24.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eL\u003c\/td\u003e\n\u003ctd\u003e8-10\u003c\/td\u003e\n\u003ctd\u003e130 \/ 51.2\u003c\/td\u003e\n\u003ctd\u003e75.1 \/ 29.6\u003c\/td\u003e\n\u003ctd\u003e62 \/ 24.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eXL\u003c\/td\u003e\n\u003ctd\u003e12\u003c\/td\u003e\n\u003ctd\u003e136 \/ 53.5\u003c\/td\u003e\n\u003ctd\u003e76.5 \/ 30.1\u003c\/td\u003e\n\u003ctd\u003e63 \/ 24.8\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=\"0\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Chocolate\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/talia-womens-button-front-jacket-with-detachable-fringe-scarf_f1_studio.jpg?v=1793709896\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":"Chocolate \/ XS","offer_id":61521347150158,"sku":"SLT1191-001","price":55.99,"currency_code":"USD","in_stock":true},{"title":"Chocolate \/ S","offer_id":61521347182926,"sku":"SLT1191-002","price":55.99,"currency_code":"USD","in_stock":true},{"title":"Chocolate \/ M","offer_id":61521347215694,"sku":"SLT1191-003","price":55.99,"currency_code":"USD","in_stock":true},{"title":"Chocolate \/ L","offer_id":61521347248462,"sku":"SLT1191-004","price":55.99,"currency_code":"USD","in_stock":true},{"title":"Chocolate \/ XL","offer_id":61521347281230,"sku":"SLT1191-005","price":55.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/talia-womens-button-front-jacket-with-detachable-fringe-scarf_f1_studio.jpg?v=1793709896"},{"product_id":"tansy-colour-block-plush-hooded-zip-jacket","title":"Tansy - Colour-Block Plush Hooded 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\u003eThe Cuddliest Jacket in Your Closet\u003c\/h2\u003e\n\u003cp\u003eTansy is an oversized hooded jacket in a thick, plush textile that feels like wearing a blanket. Wide stripes of colour block across the body and sleeves in cream, grey and your chosen shade.\u003c\/p\u003e\n\u003cp\u003eA full zip closes the front, the hood has a drawcord and two deep pockets keep your hands warm. The cut is roomy with space for a hoodie underneath. Six colours: taupe, blue, sage, rose, black and lilac. Machine wash cold on a gentle cycle, hang to dry, do not iron.\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=\"0\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\",\"4XL\",\"5XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Taupe\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/linnea-womens-color-block-fluffy-hooded-zip-jacket_f1_studio.jpg?v=1793709898\u0026amp;width=96\"},{\"v\":\"Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/linnea-womens-color-block-fluffy-hooded-zip-jacket_c_blue_studio.jpg?v=1793709898\u0026amp;width=96\"},{\"v\":\"Sage\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/linnea-womens-color-block-fluffy-hooded-zip-jacket_c_sage_studio.jpg?v=1793709897\u0026amp;width=96\"},{\"v\":\"Rose\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/linnea-womens-color-block-fluffy-hooded-zip-jacket_c_rose_studio.jpg?v=1793709897\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/linnea-womens-color-block-fluffy-hooded-zip-jacket_c_black_studio.jpg?v=1793709898\u0026amp;width=96\"},{\"v\":\"Lilac\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/linnea-womens-color-block-fluffy-hooded-zip-jacket_c_lilac_studio.jpg?v=1793709898\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":"Taupe \/ S","offer_id":61521347412302,"sku":"SLT1192-001","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Taupe \/ M","offer_id":61521347445070,"sku":"SLT1192-002","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Taupe \/ L","offer_id":61521347477838,"sku":"SLT1192-003","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Taupe \/ XL","offer_id":61521347510606,"sku":"SLT1192-004","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Taupe \/ 2XL","offer_id":61521347543374,"sku":"SLT1192-005","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Taupe \/ 3XL","offer_id":61521347576142,"sku":"SLT1192-006","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Taupe \/ 4XL","offer_id":61521347608910,"sku":"SLT1192-007","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Taupe \/ 5XL","offer_id":61521347641678,"sku":"SLT1192-008","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ S","offer_id":61521347674446,"sku":"SLT1192-009","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ M","offer_id":61521347707214,"sku":"SLT1192-010","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ L","offer_id":61521347739982,"sku":"SLT1192-011","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ XL","offer_id":61521347772750,"sku":"SLT1192-012","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 2XL","offer_id":61521347805518,"sku":"SLT1192-013","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 3XL","offer_id":61521347838286,"sku":"SLT1192-014","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 4XL","offer_id":61521347871054,"sku":"SLT1192-015","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Blue \/ 5XL","offer_id":61521347903822,"sku":"SLT1192-016","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Sage \/ S","offer_id":61521347936590,"sku":"SLT1192-017","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Sage \/ M","offer_id":61521347969358,"sku":"SLT1192-018","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Sage \/ L","offer_id":61521348002126,"sku":"SLT1192-019","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Sage \/ XL","offer_id":61521348034894,"sku":"SLT1192-020","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Sage \/ 2XL","offer_id":61521348067662,"sku":"SLT1192-021","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Sage \/ 3XL","offer_id":61521348100430,"sku":"SLT1192-022","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Sage \/ 4XL","offer_id":61521348133198,"sku":"SLT1192-023","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Sage \/ 5XL","offer_id":61521348165966,"sku":"SLT1192-024","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Rose \/ S","offer_id":61521348198734,"sku":"SLT1192-025","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Rose \/ M","offer_id":61521348231502,"sku":"SLT1192-026","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Rose \/ L","offer_id":61521348264270,"sku":"SLT1192-027","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Rose \/ XL","offer_id":61521348297038,"sku":"SLT1192-028","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Rose \/ 2XL","offer_id":61521348329806,"sku":"SLT1192-029","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Rose \/ 3XL","offer_id":61521348362574,"sku":"SLT1192-030","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Rose \/ 4XL","offer_id":61521348395342,"sku":"SLT1192-031","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Rose \/ 5XL","offer_id":61521348428110,"sku":"SLT1192-032","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ S","offer_id":61521348460878,"sku":"SLT1192-033","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ M","offer_id":61521348493646,"sku":"SLT1192-034","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ L","offer_id":61521348526414,"sku":"SLT1192-035","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ XL","offer_id":61521348559182,"sku":"SLT1192-036","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 2XL","offer_id":61521348591950,"sku":"SLT1192-037","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 3XL","offer_id":61521348624718,"sku":"SLT1192-038","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 4XL","offer_id":61521348657486,"sku":"SLT1192-039","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Black \/ 5XL","offer_id":61521348690254,"sku":"SLT1192-040","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Lilac \/ S","offer_id":61521348723022,"sku":"SLT1192-041","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Lilac \/ M","offer_id":61521348755790,"sku":"SLT1192-042","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Lilac \/ L","offer_id":61521348788558,"sku":"SLT1192-043","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Lilac \/ XL","offer_id":61521348821326,"sku":"SLT1192-044","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Lilac \/ 2XL","offer_id":61521348854094,"sku":"SLT1192-045","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Lilac \/ 3XL","offer_id":61521348886862,"sku":"SLT1192-046","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Lilac \/ 4XL","offer_id":61521348919630,"sku":"SLT1192-047","price":59.99,"currency_code":"USD","in_stock":true},{"title":"Lilac \/ 5XL","offer_id":61521348952398,"sku":"SLT1192-048","price":59.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/linnea-womens-color-block-fluffy-hooded-zip-jacket_f1_studio.jpg?v=1793709898"},{"product_id":"yelena-double-breasted-belted-short-jacket","title":"Yelena - Double-Breasted Belted Short 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\u003eThe Trench Coat Look, Cut Short at the Hip\u003c\/h2\u003e\n\u003cp\u003eYelena is a hip-length double-breasted jacket in a warm camel shade, finished with a deeper brown collar that frames the face. Raglan sleeves give the shoulders an easy line and a flap across the back yoke adds the classic trench detail.\u003c\/p\u003e\n\u003cp\u003eA long self-tie belt pulls it in at the waist, or leave it loose and wear it open with the lapels folded back. Two button flap pockets sit at the front and the jacket is fully lined. Hand wash cold or dry clean.\u003c\/p\u003e\n\u003cp\u003eSized US 4 to US 8. 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\u003eBust (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\u003eUS 4\u003c\/td\u003e\n\u003ctd\u003e88 \/ 34.6\u003c\/td\u003e\n\u003ctd\u003e63 \/ 24.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eUS 6\u003c\/td\u003e\n\u003ctd\u003e91 \/ 35.8\u003c\/td\u003e\n\u003ctd\u003e64 \/ 25.2\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eUS 8\u003c\/td\u003e\n\u003ctd\u003e94 \/ 37.0\u003c\/td\u003e\n\u003ctd\u003e65 \/ 25.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=\"0\" data-was=\"\" data-sizes='[\"US 4\",\"US 6\",\"US 8\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Camel\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/elsie-womens-double-breasted-belted-short-jacket_f1_studio.jpg?v=1793709902\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:39.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":"Camel \/ US 4","offer_id":61521350263118,"sku":"SLT1195-001","price":57.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ US 6","offer_id":61521350295886,"sku":"SLT1195-002","price":57.99,"currency_code":"USD","in_stock":true},{"title":"Camel \/ US 8","offer_id":61521350328654,"sku":"SLT1195-003","price":57.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/elsie-womens-double-breasted-belted-short-jacket_f1_studio.jpg?v=1793709902"}],"url":"https:\/\/www.solteri.co\/collections\/coats-mid-women.oembed?page=2","provider":"SOLTERI","version":"1.0","type":"link"}