{"title":"Knitwear","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\u003cdiv style=\"flex:1 1 260px;min-width:0;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;background:#2B3A4F;border-radius:14px;padding:20px 18px;text-align:center;\"\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:#C9BCA6;\"\u003eO’ZAPFT IS · SEPTEMBER–OCTOBER\u003c\/div\u003e\n\u003cdiv style=\"font-family:'Jost','Helvetica Neue',Arial,sans-serif;font-size:24px;line-height:1.15;font-weight:300;letter-spacing:.01em;color:#EDEDEA;margin-top:8px;\"\u003eThe Oktoberfest Edit\u003c\/div\u003e\n\u003cdiv style=\"font-family:'Newsreader',Georgia,'Times New Roman',serif;font-size:14px;line-height:1.55;font-weight:300;color:#EDEDEA;opacity:.82;margin:10px 0 0;\"\u003eBavarian dirndls, blouses and full sets — fitted bodice, full skirt, apron included. Cut for the Wiesn and every autumn table after it.\u003c\/div\u003e\n\u003cdiv style=\"margin-top:16px;\"\u003e\u003ca href=\"\/collections\/oktoberfest\" style=\"display:inline-block;background:#EDEDEA;color:#16181C;text-decoration:none;font-family:'Archivo','Helvetica Neue',Arial,sans-serif;font-size:10px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;padding:12px 22px;border-radius:10px;\"\u003eShop the edit\u003c\/a\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","products":[{"product_id":"wren-v-neck-sweater-cardigan","title":"Wren - V-Neck Sweater Cardigan","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eThe Cardigan That Finishes An Outfit Without Trying\u003c\/h2\u003e\n\u003cp\u003eThe Wren is the layer you reach for when the outfit is nearly right. A deep V neckline that keeps the collarbone open, a loose body that skims rather than clings, and enough weight in the knit that it hangs straight instead of riding up. It works over a shirt at a desk and over a tee on a Saturday.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-v__04_life.jpg?v=1788517332\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDeep V neckline: Keeps the neck long and layers cleanly over a collar.\u003c\/li\u003e\n\u003cli\u003eLoose cut: Skims the body with room to move, never tight across the back.\u003c\/li\u003e\n\u003cli\u003eMid-stretch knit: Gives where it needs to and returns to shape.\u003c\/li\u003e\n\u003cli\u003eHip-length hem: Sits below the waistband so it works over trousers or denim.\u003c\/li\u003e\n\u003cli\u003eEight colourways: Brown, black, ginger, military, grey, ivory, burgundy and royal.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-v__05_life.jpg?v=1788517332\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eSoft mid-weight knit with a smooth face.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold, dry flat.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Loose\u003c\/li\u003e\n\u003cli\u003eNeckline: V-neck\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve\u003c\/li\u003e\n\u003cli\u003eLength: Hip length\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter\u003c\/li\u003e\n\u003cli\u003eOccasion: Work, office, everyday\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\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\" focusable=\"false\"\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-t\"\u003eSize Guide\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eAU\/UK\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eEU\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eWaist\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eHip\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e00-0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2-4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30-32\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.9-31.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.8-24.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e34.3-35.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e0-2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4-6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e32-34\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e31.5-33.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.4-26.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e35.0-36.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2-4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e6-8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e34-36\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e33.1-34.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.0-27.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e36.6-38.2\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4-6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e10-12\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e38-40\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e35.0-37.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e28.0-30.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e38.6-40.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8-10\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e14-16\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42-44\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e37.4-39.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30.3-32.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e40.9-43.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e10-12\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e18-20\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e46\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e39.8-42.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e32.7-35.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e43.3-45.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12-14\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22-24\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e48-50\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42.1-44.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e35.0-37.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e45.7-48.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment and given in inches. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"49.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\",\"XXL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"BROWN\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-v__c_brown.jpg?v=1788517332\u0026amp;width=96\"},{\"v\":\"BLACK\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-v__c_black.jpg?v=1788517332\u0026amp;width=96\"},{\"v\":\"GINGER\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-v__c_ginger.jpg?v=1788517332\u0026amp;width=96\"},{\"v\":\"MILITARY\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-v__c_military.jpg?v=1788517332\u0026amp;width=96\"},{\"v\":\"GRAY\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-v__c_gray.jpg?v=1788517332\u0026amp;width=96\"},{\"v\":\"IVORY\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-v__c_ivory.jpg?v=1788517332\u0026amp;width=96\"},{\"v\":\"BURGUNDY\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-v__c_burgundy.jpg?v=1788574242\u0026amp;width=96\"},{\"v\":\"ROYAL\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-v__c_royal.jpg?v=1788517332\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__none\"\u003eWe only publish a fit verdict when the maker publishes measurements for it. Check the Size Guide below for this piece, and email us if you are between two sizes.\u003c\/p\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\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":60650016112974,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BROWN \/ S","offer_id":60650016145742,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BROWN \/ M","offer_id":60650016178510,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BROWN \/ L","offer_id":60650016211278,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BROWN \/ XL","offer_id":60650016244046,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BROWN \/ XXL","offer_id":60650016276814,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BLACK \/ XS","offer_id":60650016309582,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BLACK \/ S","offer_id":60650016342350,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BLACK \/ M","offer_id":60650016375118,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BLACK \/ L","offer_id":60650016407886,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BLACK \/ XL","offer_id":60650016440654,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BLACK \/ XXL","offer_id":60650016473422,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"GINGER \/ XS","offer_id":60650016506190,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"GINGER \/ S","offer_id":60650016538958,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"GINGER \/ M","offer_id":60650016571726,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"GINGER \/ L","offer_id":60650016604494,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"GINGER \/ XL","offer_id":60650016637262,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"GINGER \/ XXL","offer_id":60650016670030,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"MILITARY \/ XS","offer_id":60650016702798,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"MILITARY \/ S","offer_id":60650016735566,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"MILITARY \/ M","offer_id":60650016768334,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"MILITARY \/ L","offer_id":60650016801102,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"MILITARY \/ XL","offer_id":60650016833870,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"MILITARY \/ XXL","offer_id":60650016866638,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"GRAY \/ XS","offer_id":60650016899406,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"GRAY \/ S","offer_id":60650016932174,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"GRAY \/ M","offer_id":60650016964942,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"GRAY \/ L","offer_id":60650016997710,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"GRAY \/ XL","offer_id":60650017030478,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"GRAY \/ XXL","offer_id":60650017063246,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"IVORY \/ XS","offer_id":60650017096014,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"IVORY \/ S","offer_id":60650017128782,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"IVORY \/ M","offer_id":60650017161550,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"IVORY \/ L","offer_id":60650017194318,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"IVORY \/ XL","offer_id":60650017227086,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"IVORY \/ XXL","offer_id":60650017259854,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BURGUNDY \/ XS","offer_id":60650017292622,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BURGUNDY \/ S","offer_id":60650017325390,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BURGUNDY \/ M","offer_id":60650017358158,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BURGUNDY \/ L","offer_id":60650017390926,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BURGUNDY \/ XL","offer_id":60650017423694,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BURGUNDY \/ XXL","offer_id":60650017456462,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"ROYAL \/ XS","offer_id":60650017489230,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"ROYAL \/ S","offer_id":60650017521998,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"ROYAL \/ M","offer_id":60650017554766,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"ROYAL \/ L","offer_id":60650017587534,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"ROYAL \/ XL","offer_id":60650017620302,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"ROYAL \/ XXL","offer_id":60650017653070,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-v__01_studio.jpg?v=1788646845"},{"product_id":"maeve-buttoned-v-neck-knit-cardigan","title":"Maeve - Buttoned V-Neck Knit Cardigan","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Buttoned Cardigan Cut Close Enough To Tuck\u003c\/h2\u003e\n\u003cp\u003eThe Maeve is the fitted end of the cardigan family. A neat V neckline, a button-through front and a body that follows the shape rather than hiding it. The knit has no stretch, so the line stays where it is put - which is exactly why it tucks into a skirt without bunching.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-knit__04_life.jpg?v=1788517432\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFitted cut: Follows the body closely for a tidy line under a coat.\u003c\/li\u003e\n\u003cli\u003eButton-through front: Wear it closed as a top or open as a layer.\u003c\/li\u003e\n\u003cli\u003eV neckline: Opens the neck and works over a fine shirt collar.\u003c\/li\u003e\n\u003cli\u003eFirm knit with no stretch: Holds its shape and tucks flat.\u003c\/li\u003e\n\u003cli\u003eTwo colourways: Burgundy and brown.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-knit__05_life.jpg?v=1788517433\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eFirm fine-gauge knit.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold, dry flat.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Fitted\u003c\/li\u003e\n\u003cli\u003eNeckline: V-neck\u003c\/li\u003e\n\u003cli\u003eClosure: Button front\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve\u003c\/li\u003e\n\u003cli\u003eLength: Waist length\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter\u003c\/li\u003e\n\u003cli\u003eOccasion: Work, office, smart casual\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\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\" focusable=\"false\"\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-t\"\u003eSize Guide\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eAU\/UK\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eEU\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eWaist\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eHip\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e00-0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2-4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30-32\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.9-31.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.8-24.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e34.3-35.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e0-2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4-6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e32-34\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e31.5-33.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.4-26.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e35.0-36.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2-4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e6-8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e34-36\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e33.1-34.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e26.0-27.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e36.6-38.2\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4-6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e10-12\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e38-40\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e35.0-37.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e28.0-30.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e38.6-40.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8-10\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e14-16\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42-44\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e37.4-39.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30.3-32.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e40.9-43.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e10-12\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e18-20\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e46\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e39.8-42.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e32.7-35.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e43.3-45.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12-14\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22-24\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e48-50\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e42.1-44.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e35.0-37.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e45.7-48.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment and given in inches. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"49.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"BURGUNDY\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-knit__c_burgundy_z.jpg?v=1789031902\u0026amp;width=96\"},{\"v\":\"BROWN\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-knit__c_brown_z.jpg?v=1789031901\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__none\"\u003eWe only publish a fit verdict when the maker publishes measurements for it. Check the Size Guide below for this piece, and email us if you are between two sizes.\u003c\/p\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"BURGUNDY \/ XS","offer_id":60650019455310,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BURGUNDY \/ S","offer_id":60650019488078,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BURGUNDY \/ M","offer_id":60650019520846,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BURGUNDY \/ L","offer_id":60650019553614,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BURGUNDY \/ XL","offer_id":60650019586382,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BROWN \/ M","offer_id":60650019619150,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"BROWN \/ L","offer_id":60650019651918,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/mc-knit__01_studio.jpg?v=1788646838"},{"product_id":"anouk-panel-lapel-relaxed-sweater","title":"Anouk - Panel Lapel Relaxed Sweater","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Sweater With A Lapel Built Into It\u003c\/h2\u003e\n\u003cp\u003eThe Anouk reads as two pieces and is one. A knitted panel sits across the front like an open lapel, so the sweater carries the structure of a jacket with none of the weight. The body is cut relaxed through the shoulder and chest, which is what stops the panel from looking fussy.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-2__04_life.jpg?v=1788517453\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBuilt-in panel lapel: A folded front panel gives the shape of a jacket collar.\u003c\/li\u003e\n\u003cli\u003eRelaxed fit: Easy through the shoulder and chest, never stiff.\u003c\/li\u003e\n\u003cli\u003eMedium stretch: Moves with you and springs back.\u003c\/li\u003e\n\u003cli\u003eDropped, gently structured shoulder: Softens the line without collapsing it.\u003c\/li\u003e\n\u003cli\u003eEight colourways: Navy, light grey, brown, burgundy, army green, red, orange and dark green.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-2__05_life.jpg?v=1788517453\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eMid-weight knit with a smooth, matte face.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold separately, dry flat, do not tumble dry.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Relaxed\u003c\/li\u003e\n\u003cli\u003eNeckline: Panel lapel\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve\u003c\/li\u003e\n\u003cli\u003eLength: Hip length\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter\u003c\/li\u003e\n\u003cli\u003eOccasion: Work, smart casual, everyday\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\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\" focusable=\"false\"\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-t\"\u003eSize Guide\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e0.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e18.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e7.4\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;\"\u003e14.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e9.1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e1.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e19.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e7.8\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;\"\u003e15.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e9.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e40.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e16.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8.7\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;\"\u003e9.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8\/10\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e-\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e43.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e17.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e9.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e9.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e45.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e18.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e9.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e0.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e48\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e18.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\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;\"\u003e55\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e59\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.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;\"\u003e4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e1.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e50\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e19.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\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;\"\u003e55.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e60\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.6\u003c\/td\u003e\n\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\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;\"\u003e52\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e104\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e40.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e56\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e61\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8\/10\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e-\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e55\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e110\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e43.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e56.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e62\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e58\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e116\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e45.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e57\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e63\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.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 and given in centimetres, with the inch equivalent alongside. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"59.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Navy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-2__c_navy_z.jpg?v=1789031239\u0026amp;width=96\"},{\"v\":\"Light Grey\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-2__c_light-grey_z.jpg?v=1789031239\u0026amp;width=96\"},{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-2__c_brown_z.jpg?v=1789031241\u0026amp;width=96\"},{\"v\":\"Burgundy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-2__c_burgundy_z.jpg?v=1789031240\u0026amp;width=96\"},{\"v\":\"ArmyGreen\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-2__c_armygreen_z.jpg?v=1789031240\u0026amp;width=96\"},{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-2__c_red_z.jpg?v=1789031239\u0026amp;width=96\"},{\"v\":\"Orange\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-2__c_orange_z.jpg?v=1789031241\u0026amp;width=96\"},{\"v\":\"Dark Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-2__c_dark-green_z.jpg?v=1789031239\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__none\"\u003eWe only publish a fit verdict when the maker publishes measurements for it. Check the Size Guide below for this piece, and email us if you are between two sizes.\u003c\/p\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\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":60650020831566,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ S","offer_id":60650020864334,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ M","offer_id":60650020897102,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ L","offer_id":60650020929870,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ XL","offer_id":60650020962638,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Light Grey \/ XS","offer_id":60650020995406,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Light Grey \/ S","offer_id":60650021028174,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Light Grey \/ M","offer_id":60650021060942,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Light Grey \/ L","offer_id":60650021093710,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Light Grey \/ XL","offer_id":60650021126478,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Brown \/ XS","offer_id":60650021159246,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Brown \/ S","offer_id":60650021192014,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Brown \/ M","offer_id":60650021224782,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Brown \/ L","offer_id":60650021257550,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Brown \/ XL","offer_id":60650021290318,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Burgundy \/ XS","offer_id":60650021323086,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Burgundy \/ S","offer_id":60650021355854,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Burgundy \/ M","offer_id":60650021388622,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Burgundy \/ L","offer_id":60650021421390,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Burgundy \/ XL","offer_id":60650021454158,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"ArmyGreen \/ XS","offer_id":60650021486926,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"ArmyGreen \/ S","offer_id":60650021519694,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"ArmyGreen \/ M","offer_id":60650021552462,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"ArmyGreen \/ L","offer_id":60650021585230,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"ArmyGreen \/ XL","offer_id":60650021617998,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ XS","offer_id":60650021650766,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ S","offer_id":60650021683534,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ M","offer_id":60650021716302,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ L","offer_id":60650021749070,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ XL","offer_id":60650021781838,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Orange \/ XS","offer_id":60650021814606,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Orange \/ S","offer_id":60650021847374,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Orange \/ M","offer_id":60650021880142,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Orange \/ L","offer_id":60650021912910,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Orange \/ XL","offer_id":60650021945678,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Dark Green \/ XS","offer_id":60650021978446,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Dark Green \/ S","offer_id":60650022011214,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Dark Green \/ M","offer_id":60650022043982,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Dark Green \/ L","offer_id":60650022076750,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Dark Green \/ XL","offer_id":60650022109518,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-2__01_studio.jpg?v=1788638482"},{"product_id":"linnea-two-tone-double-sided-knit-top","title":"Linnea - Two-Tone Double-Sided Knit Top","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eTwo Sides, Two Tones, One Top\u003c\/h2\u003e\n\u003cp\u003eThe Linnea is knitted double-sided, so the face and the reverse carry different tones and the top shifts as it moves. Cut close and short through the body with long sleeves, it is the piece that goes under a blazer and still does something on its own.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-two__04_life.jpg?v=1788517471\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDouble-sided knit: Two tones worked into one fabric, not printed on.\u003c\/li\u003e\n\u003cli\u003eRegular close fit: Neat through the body without being restrictive.\u003c\/li\u003e\n\u003cli\u003eMedium stretch: Comfortable across the shoulder and easy to layer.\u003c\/li\u003e\n\u003cli\u003eCropped length: Sits at the waistband, made for high-rise trousers and skirts.\u003c\/li\u003e\n\u003cli\u003eLong sleeves: Full-length with a clean cuff.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-two__05_life.jpg?v=1788517471\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eDouble-faced knit.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold separately, dry flat, do not tumble dry.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Regular\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve\u003c\/li\u003e\n\u003cli\u003eLength: Cropped, sits at the waist\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter, spring\u003c\/li\u003e\n\u003cli\u003eOccasion: Work, evening, everyday\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\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\" focusable=\"false\"\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-t\"\u003eSize Guide\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e0.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e9.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e1.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e5.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e9.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e9.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e13.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e5.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e9.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e9.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8\/10\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e-\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e13.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e5.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e27.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e10.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e9.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e14.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e5.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e11.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e9.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e9.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;\"\u003e2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e0.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e31\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e56\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e60\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e54\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e1.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e32\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e60\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e61\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e55\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.7\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\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;\"\u003e33\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e13.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e64\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e62\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e56\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e8\/10\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e-\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e34.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e13.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e70\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e27.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e63\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e57\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.4\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;\"\u003e12\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e36\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e14.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e76\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e64\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e58\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.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 and given in centimetres, with the inch equivalent alongside. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"49.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-two__c_black.jpg?v=1788573985\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__none\"\u003eWe only publish a fit verdict when the maker publishes measurements for it. Check the Size Guide below for this piece, and email us if you are between two sizes.\u003c\/p\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\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":60650023485774,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ S","offer_id":60650023518542,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ M","offer_id":60650023551310,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ L","offer_id":60650023584078,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ XL","offer_id":60650023616846,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cm-two__01_studio.jpg?v=1788638438"},{"product_id":"saffron-scalloped-round-neck-slim-sweater","title":"Saffron - Scalloped Round-Neck Slim Sweater","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Slim Sweater With A Scalloped Edge\u003c\/h2\u003e\n\u003cp\u003eThe Saffron is cut slim and finished with a scalloped trim and small buttons - the kind of detail that reads as considered rather than decorative. A classic round neck, a hip-length body and enough stretch to stay comfortable through a full day.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rh-brown__04_life.jpg?v=1788517484\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eScalloped trim: A curved edge finish with small buttons along it.\u003c\/li\u003e\n\u003cli\u003eSlim fit: Follows the body from shoulder to hip.\u003c\/li\u003e\n\u003cli\u003eRound neckline: Clean and high enough to wear alone.\u003c\/li\u003e\n\u003cli\u003eMedium stretch: Comfortable across the shoulders and easy to layer.\u003c\/li\u003e\n\u003cli\u003eHip length: Falls to the hip, works over denim or a skirt.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rh-brown__05_life.jpg?v=1788517484\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eSoft mid-weight knit with a smooth face.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold, dry flat.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Slim\u003c\/li\u003e\n\u003cli\u003eNeckline: Round neck\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve\u003c\/li\u003e\n\u003cli\u003eDetail: Scalloped trim with buttons\u003c\/li\u003e\n\u003cli\u003eLength: Hip length\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter\u003c\/li\u003e\n\u003cli\u003eOccasion: Work, everyday\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\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\" focusable=\"false\"\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-t\"\u003eSize Guide\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUK (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUK (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eEU (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eEU (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eWaist\u003c\/th\u003e\n\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;\"\u003e0.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e0.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e11.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e78-80 30.7-31.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e61 24.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;\"\u003e0.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e1.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e32\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e81-83 31.9-32.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e64 25.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;\"\u003e0.8-1.6\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;\"\u003e2.4-3.1\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;\"\u003e13.4-14.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e84-89 33.1-35.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e67-70 26.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;\"\u003e2.4-3.1\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;\"\u003e3.9-4.7\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;\"\u003e15.0-15.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e90-95 35.4-37.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e73-76 28.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;\"\u003e3.9-4.7\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;\"\u003e5.5-6.3\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;\"\u003e16.5-17.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e96-101 37.8-39.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e79-82 31.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;\"\u003e5.5-6.3\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;\"\u003e7.1-7.9\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;\"\u003e18.1-18.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e102-110 40.2-43.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e86-90 33.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;\"\u003e7.1-7.9\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;\"\u003e8.7-9.4\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;\"\u003e19.7-20.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e111-116 43.7-45.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e94-98 37.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;\"\u003e7.9-8.7\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;\"\u003e9.4-10.2\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;\"\u003e20.5-21.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e117-124 46.1-48.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e98-106 38.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\"\u003eMeasurements are taken flat from the garment and given in centimetres, with the inch equivalent alongside. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"49.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rh-brown__c_brown.jpg?v=1788574150\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__none\"\u003eWe only publish a fit verdict when the maker publishes measurements for it. Check the Size Guide below for this piece, and email us if you are between two sizes.\u003c\/p\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Brown \/ S","offer_id":60650025025870,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"Brown \/ M","offer_id":60650025058638,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"Brown \/ L","offer_id":60650025091406,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rh-brown__01_studio.jpg?v=1788638425"},{"product_id":"fern-ribbed-round-neck-knit-sweater","title":"Fern - Ribbed Round-Neck Knit Sweater","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eRibbed, Slim, And Done With It\u003c\/h2\u003e\n\u003cp\u003eThe Fern is the plain one, and that is the point. An all-over rib gives the sweater its texture, the slim cut gives it its line, and a solid colour keeps it out of the way of everything else you are wearing. It goes with denim, with a skirt, and under any coat.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rh-round__04_life.jpg?v=1788517498\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAll-over ribbing: Vertical texture through body and sleeves.\u003c\/li\u003e\n\u003cli\u003eSlim fit: A close, flattering line without being tight.\u003c\/li\u003e\n\u003cli\u003eRound neckline: Sits high and clean.\u003c\/li\u003e\n\u003cli\u003eSolid colour: Nothing competing with the rest of the outfit.\u003c\/li\u003e\n\u003cli\u003eSoft handle: Comfortable enough to wear against the skin.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rh-round__05_life.jpg?v=1788517498\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eSoft ribbed knit.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold, dry flat.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Slim\u003c\/li\u003e\n\u003cli\u003eNeckline: Round neck\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve\u003c\/li\u003e\n\u003cli\u003eTexture: All-over rib\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter\u003c\/li\u003e\n\u003cli\u003eOccasion: Everyday, work\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\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\" focusable=\"false\"\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-t\"\u003eSize Guide\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUS (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUK (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eUK (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eEU (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eEU (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eWaist\u003c\/th\u003e\n\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;\"\u003e0.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e0.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e11.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e78-80 30.7-31.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e61 24.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;\"\u003e0.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e1.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e32\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e12.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e81-83 31.9-32.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e64 25.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;\"\u003e0.8-1.6\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;\"\u003e2.4-3.1\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;\"\u003e13.4-14.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e84-89 33.1-35.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e67-70 26.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;\"\u003e2.4-3.1\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;\"\u003e3.9-4.7\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;\"\u003e15.0-15.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e90-95 35.4-37.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e73-76 28.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;\"\u003e3.9-4.7\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;\"\u003e5.5-6.3\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;\"\u003e16.5-17.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e96-101 37.8-39.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e79-82 31.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;\"\u003e5.5-6.3\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;\"\u003e7.1-7.9\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;\"\u003e18.1-18.9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e102-110 40.2-43.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e86-90 33.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;\"\u003e7.1-7.9\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;\"\u003e8.7-9.4\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;\"\u003e19.7-20.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e111-116 43.7-45.7\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e94-98 37.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;\"\u003e7.9-8.7\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;\"\u003e9.4-10.2\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;\"\u003e20.5-21.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e117-124 46.1-48.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e98-106 38.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\"\u003eMeasurements are taken flat from the garment and given in centimetres, with the inch equivalent alongside. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"49.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rh-round__c_green.jpg?v=1788573848\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__none\"\u003eWe only publish a fit verdict when the maker publishes measurements for it. Check the Size Guide below for this piece, and email us if you are between two sizes.\u003c\/p\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\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 \/ S","offer_id":60650027024718,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ M","offer_id":60650027057486,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ L","offer_id":60650027090254,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/rh-round__01_studio.jpg?v=1788638382"},{"product_id":"ingrid-roll-neck-sweater","title":"Ingrid - Roll-Neck Sweater","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Roll Neck You Can Live In All Winter\u003c\/h2\u003e\n\u003cp\u003eThe Ingrid is a proper roll neck - the collar is high and soft enough to fold twice, and the body is cut with room rather than pulled tight. Soft, elastic and warm, it is the sweater that gets worn from October to March and reads as deliberate every time.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/fs-kuscheliger__04_life.jpg?v=1788517518\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHigh roll neck: Folds over softly and sits close without gripping.\u003c\/li\u003e\n\u003cli\u003eRelaxed body: Room through the chest and waist for comfort and layering.\u003c\/li\u003e\n\u003cli\u003eSoft, elastic knit: Stretches with movement and recovers its shape.\u003c\/li\u003e\n\u003cli\u003eFull-length sleeves: Finished with a ribbed cuff.\u003c\/li\u003e\n\u003cli\u003eEight colourways: Yellow, brown, grey, black, turquoise, beige, pink and orange.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/fs-kuscheliger__05_life.jpg?v=1788517518\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eSoft, elastic long-staple knit.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold, dry flat.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Relaxed\u003c\/li\u003e\n\u003cli\u003eNeckline: Roll neck\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter\u003c\/li\u003e\n\u003cli\u003eOccasion: Everyday, work, weekend\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"69.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Gelb\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/fs-kuscheliger__c_gelb.jpg?v=1788517518\u0026amp;width=96\"},{\"v\":\"Braun\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/fs-kuscheliger__c_braun.jpg?v=1788517518\u0026amp;width=96\"},{\"v\":\"Grau\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/fs-kuscheliger__c_grau.jpg?v=1788573940\u0026amp;width=96\"},{\"v\":\"Schwarz\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/fs-kuscheliger__c_schwarz.jpg?v=1788517518\u0026amp;width=96\"},{\"v\":\"T\\u00fcrkis\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/fs-kuscheliger__c_t-rkis.jpg?v=1788517518\u0026amp;width=96\"},{\"v\":\"Beige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/fs-kuscheliger__c_beige.jpg?v=1788517518\u0026amp;width=96\"},{\"v\":\"Rosa\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/fs-kuscheliger__c_rosa.jpg?v=1788517518\u0026amp;width=96\"},{\"v\":\"Orange\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/fs-kuscheliger__c_orange.jpg?v=1788517518\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\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\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":"Gelb \/ S","offer_id":60650028499278,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Gelb \/ M","offer_id":60650028532046,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Gelb \/ L","offer_id":60650028564814,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Gelb \/ XL","offer_id":60650028597582,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Gelb \/ 2XL","offer_id":60650028630350,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Braun \/ S","offer_id":60650028663118,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Braun \/ M","offer_id":60650028695886,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Braun \/ L","offer_id":60650028728654,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Braun \/ XL","offer_id":60650028761422,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Braun \/ 2XL","offer_id":60650028794190,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Grau \/ S","offer_id":60650028826958,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Grau \/ M","offer_id":60650028859726,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Grau \/ L","offer_id":60650028892494,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Grau \/ XL","offer_id":60650028925262,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Grau \/ 2XL","offer_id":60650028958030,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Schwarz \/ S","offer_id":60650028990798,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Schwarz \/ M","offer_id":60650029023566,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Schwarz \/ L","offer_id":60650029056334,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Schwarz \/ XL","offer_id":60650029089102,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Schwarz \/ 2XL","offer_id":60650029121870,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Türkis \/ S","offer_id":60650029154638,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Türkis \/ M","offer_id":60650029187406,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Türkis \/ L","offer_id":60650029220174,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Türkis \/ XL","offer_id":60650029252942,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Türkis \/ 2XL","offer_id":60650029285710,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ S","offer_id":60650029318478,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ M","offer_id":60650029351246,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ L","offer_id":60650029384014,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ XL","offer_id":60650029416782,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ 2XL","offer_id":60650029449550,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Rosa \/ S","offer_id":60650029482318,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Rosa \/ M","offer_id":60650029515086,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Rosa \/ L","offer_id":60650029547854,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Rosa \/ XL","offer_id":60650029580622,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Rosa \/ 2XL","offer_id":60650029613390,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Orange \/ S","offer_id":60650029646158,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Orange \/ M","offer_id":60650029678926,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Orange \/ L","offer_id":60650029711694,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Orange \/ XL","offer_id":60650029744462,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Orange \/ 2XL","offer_id":60650029777230,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/fs-kuscheliger__01_studio.jpg?v=1788638393"},{"product_id":"annelise-fine-knit-classic-sweater","title":"Annelise - Fine-Knit Classic Sweater","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eFine Gauge, Classic Cut, Nothing Extra\u003c\/h2\u003e\n\u003cp\u003eThe Annelise is the quiet one in the drawer that gets worn most. A fine-gauge knit with a smooth, even face and a shape that holds - close through the shoulder, straight through the body. It layers under a blazer without bulk and stands on its own with trousers.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/fs-damen__04_life.jpg?v=1788517538\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFine-gauge knit: A smooth, even surface with no visible texture.\u003c\/li\u003e\n\u003cli\u003eShape-retaining construction: Keeps its line rather than dropping with wear.\u003c\/li\u003e\n\u003cli\u003eClassic silhouette: Close at the shoulder, straight through the body.\u003c\/li\u003e\n\u003cli\u003eLightweight warmth: Warm without adding bulk under a coat.\u003c\/li\u003e\n\u003cli\u003eThree colourways: Navy, sand beige and black.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/fs-damen__05_life.jpg?v=1788517537\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eFine-gauge knit with a smooth face.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold, dry flat.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Classic, close through the shoulder\u003c\/li\u003e\n\u003cli\u003eNeckline: Round neck\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter, spring\u003c\/li\u003e\n\u003cli\u003eOccasion: Work, smart casual, evening\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"79.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Marineblau\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/fs-damen__c_marineblau.jpg?v=1788573566\u0026amp;width=96\"},{\"v\":\"Sandbeige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/fs-damen__c_sandbeige.jpg?v=1788517538\u0026amp;width=96\"},{\"v\":\"Schwarz\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/fs-damen__c_schwarz.jpg?v=1788517537\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\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\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":"Marineblau \/ S","offer_id":60650031087950,"sku":null,"price":79.99,"currency_code":"GBP","in_stock":true},{"title":"Marineblau \/ M","offer_id":60650031120718,"sku":null,"price":79.99,"currency_code":"GBP","in_stock":true},{"title":"Marineblau \/ L","offer_id":60650031153486,"sku":null,"price":79.99,"currency_code":"GBP","in_stock":true},{"title":"Marineblau \/ XL","offer_id":60650031186254,"sku":null,"price":79.99,"currency_code":"GBP","in_stock":true},{"title":"Marineblau \/ 2XL","offer_id":60650031219022,"sku":null,"price":79.99,"currency_code":"GBP","in_stock":true},{"title":"Sandbeige \/ S","offer_id":60650031251790,"sku":null,"price":79.99,"currency_code":"GBP","in_stock":true},{"title":"Sandbeige \/ M","offer_id":60650031284558,"sku":null,"price":79.99,"currency_code":"GBP","in_stock":true},{"title":"Sandbeige \/ L","offer_id":60650031317326,"sku":null,"price":79.99,"currency_code":"GBP","in_stock":true},{"title":"Sandbeige \/ XL","offer_id":60650031350094,"sku":null,"price":79.99,"currency_code":"GBP","in_stock":true},{"title":"Sandbeige \/ 2XL","offer_id":60650031382862,"sku":null,"price":79.99,"currency_code":"GBP","in_stock":true},{"title":"Schwarz \/ S","offer_id":60650031415630,"sku":null,"price":79.99,"currency_code":"GBP","in_stock":true},{"title":"Schwarz \/ M","offer_id":60650031448398,"sku":null,"price":79.99,"currency_code":"GBP","in_stock":true},{"title":"Schwarz \/ L","offer_id":60650031481166,"sku":null,"price":79.99,"currency_code":"GBP","in_stock":true},{"title":"Schwarz \/ XL","offer_id":60650031513934,"sku":null,"price":79.99,"currency_code":"GBP","in_stock":true},{"title":"Schwarz \/ 2XL","offer_id":60650031546702,"sku":null,"price":79.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/fs-damen__01_studio.jpg?v=1788638403"},{"product_id":"cressida-striped-off-shoulder-knit-sweater","title":"Cressida - Striped Off-Shoulder Knit Sweater","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eAn Off-Shoulder Knit That Still Keeps You Warm\u003c\/h2\u003e\n\u003cp\u003eThe Cressida takes the shoulder out of a winter sweater without taking the warmth with it. A wide neckline sits off the shoulders, the body is cut loose, and a horizontal stripe runs across it so the shape reads clearly. Long sleeves keep the arms covered.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/db-striped__04_life.jpg?v=1788517554\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOff-the-shoulder neckline: A wide, soft opening that sits below the collarbone.\u003c\/li\u003e\n\u003cli\u003eLoose fit: Generous through the body so the neckline can sit where it should.\u003c\/li\u003e\n\u003cli\u003eHorizontal stripe: A clean repeating stripe across the body and sleeves.\u003c\/li\u003e\n\u003cli\u003eLong sleeves: Full-length with a regular cut.\u003c\/li\u003e\n\u003cli\u003eThree colourways: Blue, navy and pink.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/db-striped__05_life.jpg?v=1788517554\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eMid-weight knit.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold, dry flat.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Loose\u003c\/li\u003e\n\u003cli\u003eNeckline: Off-the-shoulder\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve, regular\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter\u003c\/li\u003e\n\u003cli\u003eOccasion: Evening, weekend, everyday\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\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\" focusable=\"false\"\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-t\"\u003eSize Guide\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\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;\"\u003eSleeve Length (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve Length (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;\"\u003e22\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e57\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e57\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e144\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e50\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;\"\u003e23\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e58\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e58\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e148\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e51\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;\"\u003e23\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e59\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e60\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e152\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e52\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment and given in centimetres, with the inch equivalent alongside. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"59.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/db-striped__c_blue.jpg?v=1788517554\u0026amp;width=96\"},{\"v\":\"Navy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/db-striped__c_navy.jpg?v=1788573758\u0026amp;width=96\"},{\"v\":\"Pink\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/db-striped__c_pink.jpg?v=1788517554\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__none\"\u003eWe only publish a fit verdict when the maker publishes measurements for it. Check the Size Guide below for this piece, and email us if you are between two sizes.\u003c\/p\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\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 \/ S","offer_id":60650032333134,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ M","offer_id":60650032365902,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ L","offer_id":60650032398670,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ S","offer_id":60650032431438,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ M","offer_id":60650032464206,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ L","offer_id":60650032496974,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ S","offer_id":60650032529742,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ M","offer_id":60650032562510,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ L","offer_id":60650032595278,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/db-striped__01_studio.jpg?v=1788638412"},{"product_id":"winifred-chunky-cross-button-knit-sweater","title":"Winifred - Chunky Cross-Button Knit Sweater","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Chunky Knit With The Buttons Set On The Cross\u003c\/h2\u003e\n\u003cp\u003eThe Winifred is the heavy one. A thick knit, a V neckline and a row of buttons running on a diagonal across the front, so the closure itself is the detail. Cut in one generous size that falls long over the hip.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/db-chunky__04_life.jpg?v=1788517570\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eChunky knit: Real weight and warmth, medium thickness through the body.\u003c\/li\u003e\n\u003cli\u003eCross-button front: Buttons set on a diagonal rather than straight down.\u003c\/li\u003e\n\u003cli\u003eV neckline: Opens the neck against the volume of the knit.\u003c\/li\u003e\n\u003cli\u003eLong body: Falls well below the hip.\u003c\/li\u003e\n\u003cli\u003eTwo colourways: Grey and black.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/db-chunky__05_life.jpg?v=1788517570\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eChunky mid-weight knit.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold, dry flat.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Regular, one size\u003c\/li\u003e\n\u003cli\u003eNeckline: V-neck\u003c\/li\u003e\n\u003cli\u003eClosure: Cross-set buttons\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve\u003c\/li\u003e\n\u003cli\u003eLength: Long, below the hip\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter\u003c\/li\u003e\n\u003cli\u003eOccasion: Weekend, everyday\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\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\" focusable=\"false\"\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-t\"\u003eSize Guide\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\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;\"\u003eSleeve (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve (cm)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eOne Size\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e27\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e69\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;\"\u003e120\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;\"\u003e58\u003c\/td\u003e\n\u003c\/tr\u003e\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment and given in centimetres, with the inch equivalent alongside. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"49.99\" data-was=\"\" data-sizes='[\"One Size\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Grey\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/db-chunky__c_grey.jpg?v=1788574228\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/db-chunky__c_black.jpg?v=1788517569\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__none\"\u003eWe only publish a fit verdict when the maker publishes measurements for it. Check the Size Guide below for this piece, and email us if you are between two sizes.\u003c\/p\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\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":"One Size \/ Grey","offer_id":60650035544398,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true},{"title":"One Size \/ Black","offer_id":60650035577166,"sku":null,"price":49.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/db-chunky__01_studio.jpg?v=1788638370"},{"product_id":"orla-oversized-crewneck-knit-sweater","title":"Orla - Oversized Crewneck Knit Sweater","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eOversized On Purpose, Not By Accident\u003c\/h2\u003e\n\u003cp\u003eThe Orla is cut deliberately large - one relaxed size, a wide body and a soft knit that drapes rather than holds. It is the sweater for the day that does not need an outfit, and it layers over a shirt without a fight.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/zs-oversized__04_life.jpg?v=1788517589\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOversized cut: One relaxed size, generous through body and sleeve.\u003c\/li\u003e\n\u003cli\u003eCrew neckline: Classic round neck with a ribbed trim.\u003c\/li\u003e\n\u003cli\u003eSoft draping knit: Falls away from the body rather than clinging.\u003c\/li\u003e\n\u003cli\u003eEasy layering: Room for a shirt or fine top underneath.\u003c\/li\u003e\n\u003cli\u003eSix colourways: Light blue, black, beige, white, dark red and azure.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/zs-oversized__05_life.jpg?v=1788517588\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eSoft draping knit.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold, dry flat.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Oversized, one size\u003c\/li\u003e\n\u003cli\u003eNeckline: Crew neck\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter\u003c\/li\u003e\n\u003cli\u003eOccasion: Weekend, everyday\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"59.99\" data-was=\"\" data-sizes='[\"One size\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Light Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/zs-oversized__c_light-blue.jpg?v=1788517587\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/zs-oversized__c_black.jpg?v=1788517587\u0026amp;width=96\"},{\"v\":\"Beige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/zs-oversized__c_beige.jpg?v=1788574077\u0026amp;width=96\"},{\"v\":\"White\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/zs-oversized__c_white.jpg?v=1788517587\u0026amp;width=96\"},{\"v\":\"Dark Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/zs-oversized__c_dark-red.jpg?v=1788517587\u0026amp;width=96\"},{\"v\":\"Azure\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/zs-oversized__c_azure.jpg?v=1788517587\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\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Light Blue \/ One size","offer_id":60650048684366,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ One size","offer_id":60650048717134,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ One size","offer_id":60650048749902,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ One size","offer_id":60650048782670,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Dark Red \/ One size","offer_id":60650048815438,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Azure \/ One size","offer_id":60650048848206,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/zs-oversized__01_studio.jpg?v=1788638358"},{"product_id":"niamh-chevron-funnel-neck-sweater","title":"Niamh - Chevron Funnel-Neck Sweater","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Two-Tone Chevron With A Soft Funnel Neck\u003c\/h2\u003e\n\u003cp\u003eThe Niamh puts a strong pattern on a quiet shape. A two-tone chevron runs across the body, the neck is a softly structured funnel rather than a tight roll, and the shoulders drop to keep the whole thing relaxed. Pattern doing the work, cut staying out of the way.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/zs-eireann__04_life.jpg?v=1788517612\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTwo-tone chevron: A directional V pattern worked across the body.\u003c\/li\u003e\n\u003cli\u003eSoftly structured funnel neck: Stands without gripping the throat.\u003c\/li\u003e\n\u003cli\u003eDropped shoulders: Relaxes the line through the upper arm.\u003c\/li\u003e\n\u003cli\u003eRelaxed silhouette: Easy through the body, not oversized.\u003c\/li\u003e\n\u003cli\u003eThree colourways: Beige, navy blue and purple.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/zs-eireann__05_life.jpg?v=1788517611\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003ePlush soft knit.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold, dry flat.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Relaxed\u003c\/li\u003e\n\u003cli\u003eNeckline: Funnel neck\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve, dropped shoulder\u003c\/li\u003e\n\u003cli\u003ePattern: Two-tone chevron\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter\u003c\/li\u003e\n\u003cli\u003eOccasion: Weekend, work, everyday\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"59.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Beige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/zs-eireann__c_beige.jpg?v=1788574041\u0026amp;width=96\"},{\"v\":\"Navy Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/zs-eireann__c_navy-blue.jpg?v=1788517612\u0026amp;width=96\"},{\"v\":\"Purple\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/zs-eireann__c_purple.jpg?v=1788517611\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\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\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":60650058678606,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ S","offer_id":60650058711374,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ M","offer_id":60650058744142,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ L","offer_id":60650058776910,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ XL","offer_id":60650058809678,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ 2XL","offer_id":60650058842446,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Navy Blue \/ XS","offer_id":60650058875214,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Navy Blue \/ S","offer_id":60650058907982,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Navy Blue \/ M","offer_id":60650058940750,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Navy Blue \/ L","offer_id":60650058973518,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Navy Blue \/ XL","offer_id":60650059006286,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Navy Blue \/ 2XL","offer_id":60650059039054,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Purple \/ XS","offer_id":60650059071822,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Purple \/ S","offer_id":60650059104590,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Purple \/ M","offer_id":60650059137358,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Purple \/ L","offer_id":60650059170126,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Purple \/ XL","offer_id":60650059202894,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true},{"title":"Purple \/ 2XL","offer_id":60650059235662,"sku":null,"price":59.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/zs-eireann__01_studio.jpg?v=1788638347"},{"product_id":"sylvia-mock-neck-knit-sweater","title":"Sylvia - Mock-Neck Knit Sweater","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Mock Neck Fine Enough To Wear Underneath\u003c\/h2\u003e\n\u003cp\u003eThe Sylvia is knitted fine enough to sit under a blazer or a coat without a trace of bulk, and soft enough to wear straight against the skin. The mock neck stands just high enough to read as deliberate, and the knit's natural curl gives the hem and cuffs their finish.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ds-mock__04_life.jpg?v=1788517630\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMock neckline: Stands low and neat, no fold.\u003c\/li\u003e\n\u003cli\u003eFine knit: Slim enough to layer under tailoring without bulk.\u003c\/li\u003e\n\u003cli\u003eSoft against the skin: Comfortable worn on its own.\u003c\/li\u003e\n\u003cli\u003eNatural curled edges: Hem and cuffs finish with the knit's own roll.\u003c\/li\u003e\n\u003cli\u003eFour colourways: Cream, coffee, beige and red.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ds-mock__05_life.jpg?v=1788517629\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eFine, soft, elastic knit.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold, dry flat.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Close, follows the body\u003c\/li\u003e\n\u003cli\u003eNeckline: Mock neck\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter, spring\u003c\/li\u003e\n\u003cli\u003eOccasion: Work, evening, everyday\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\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\" focusable=\"false\"\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-t\"\u003eSize Guide\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 SIZE\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBUST\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eWAIST\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eHIPS\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;\"\u003e28.5-30.5\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21-23\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e31.5-33.5\"\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e0-2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e30.5-32.5\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23-25\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e33.5-35.5\"\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;\"\u003e4-6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e32.5-34.5\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e25-27\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e35.5-37.5\"\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;\"\u003e8-10\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e34.5-36.5\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e27-29\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e37.5-39.5\"\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;\"\u003e12-14\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e36.5-38.5\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e29-31\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e39.5-41.5\"\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e16\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e38.5-40.5\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e31-33\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e41.5-43.5\"\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXXL\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;\"\u003e40.5-42.5\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e33-35\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e43.5-45.5\"\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment and given in inches. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"109.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Cream\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ds-mock__c_cream.jpg?v=1788517629\u0026amp;width=96\"},{\"v\":\"Coffee\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ds-mock__c_coffee.jpg?v=1788574180\u0026amp;width=96\"},{\"v\":\"Beige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ds-mock__c_beige.jpg?v=1788517629\u0026amp;width=96\"},{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ds-mock__c_red.jpg?v=1788517629\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__none\"\u003eWe only publish a fit verdict when the maker publishes measurements for it. Check the Size Guide below for this piece, and email us if you are between two sizes.\u003c\/p\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\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":60650061234510,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Cream \/ M","offer_id":60650061267278,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Coffee \/ S","offer_id":60650061300046,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Coffee \/ M","offer_id":60650061332814,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Coffee \/ L","offer_id":60650061365582,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ L","offer_id":60650061398350,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ S","offer_id":60650061431118,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ M","offer_id":60650061463886,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ L","offer_id":60650061496654,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ds-mock__01_studio.jpg?v=1788638333"},{"product_id":"iris-thin-knit-layering-sweater","title":"Iris - Thin-Knit Layering Sweater","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eThe Thin One That Does The Most Work\u003c\/h2\u003e\n\u003cp\u003eThe Iris is the lightest sweater in the drawer and the one that ends up in every outfit. A thin, smooth knit with a soft sheen to the surface, cut to sit close without gripping. It goes under a coat in January and on its own in April.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ds-soft__04_life.jpg?v=1788517648\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThin knit: Real warmth with almost no thickness.\u003c\/li\u003e\n\u003cli\u003eSmooth, lightly lustrous face: Catches light without shine.\u003c\/li\u003e\n\u003cli\u003eClose fit: Follows the body cleanly, easy to layer over or under.\u003c\/li\u003e\n\u003cli\u003eSoft handle: Comfortable worn against the skin.\u003c\/li\u003e\n\u003cli\u003eSix colourways: Red, light camel, purple, grey, yellow and pink.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ds-soft__05_life.jpg?v=1788517648\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eFine, soft, elastic knit with a smooth face.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold, dry flat.\u003c\/p\u003e\n\u003cp\u003eHand wash cold with a mild detergent. Do not wring or tumble dry. Hang to dry in the shade. Iron on the reverse at the lowest setting.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Close\u003c\/li\u003e\n\u003cli\u003eNeckline: Round neck\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter, spring\u003c\/li\u003e\n\u003cli\u003eOccasion: Work, everyday, evening\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"109.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ds-soft__c_red.jpg?v=1788517648\u0026amp;width=96\"},{\"v\":\"Light Camel\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ds-soft__c_light-camel.jpg?v=1788573947\u0026amp;width=96\"},{\"v\":\"Purple\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ds-soft__c_purple.jpg?v=1788517648\u0026amp;width=96\"},{\"v\":\"Grey\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ds-soft__c_grey.jpg?v=1788517648\u0026amp;width=96\"},{\"v\":\"Yellow\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ds-soft__c_yellow.jpg?v=1788517648\u0026amp;width=96\"},{\"v\":\"Pink\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ds-soft__c_pink.jpg?v=1788517648\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\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\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":60650063200590,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ M","offer_id":60650063233358,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ L","offer_id":60650063266126,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ XL","offer_id":60650063298894,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Light Camel \/ S","offer_id":60650063331662,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Light Camel \/ M","offer_id":60650063364430,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Light Camel \/ L","offer_id":60650063397198,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Light Camel \/ XL","offer_id":60650063429966,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Purple \/ S","offer_id":60650063462734,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Purple \/ M","offer_id":60650063495502,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Purple \/ L","offer_id":60650063528270,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Purple \/ XL","offer_id":60650063561038,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Grey \/ S","offer_id":60650063593806,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Grey \/ M","offer_id":60650063626574,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Grey \/ L","offer_id":60650063659342,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Grey \/ XL","offer_id":60650063692110,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Yellow \/ S","offer_id":60650063724878,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Yellow \/ M","offer_id":60650063757646,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Yellow \/ L","offer_id":60650063790414,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Yellow \/ XL","offer_id":60650063823182,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ S","offer_id":60650063855950,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ M","offer_id":60650063888718,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ L","offer_id":60650063921486,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ XL","offer_id":60650063954254,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/ds-soft__01_studio.jpg?v=1788638324"},{"product_id":"blanche-round-neck-loose-pullover","title":"Blanche - Round-Neck Loose Pullover","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Loose White Pullover That Still Looks Sharp\u003c\/h2\u003e\n\u003cp\u003eThe Blanche is a plain crew-neck pullover cut loose enough to drape and clean enough to wear to work. A breathable knit, a solid colour and a relaxed line - the whole appeal is that there is nothing to date it.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/oy-elegant__04_life.jpg?v=1788517665\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCrew neckline: Simple round neck with a ribbed trim.\u003c\/li\u003e\n\u003cli\u003eLoose, regular fit: Room to move through the day without looking slouchy.\u003c\/li\u003e\n\u003cli\u003eBreathable knit: Comfortable indoors as well as under a coat.\u003c\/li\u003e\n\u003cli\u003eSoft drape: Falls away from the body rather than holding a shape.\u003c\/li\u003e\n\u003cli\u003eLong sleeves: Full length with a ribbed cuff.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/oy-elegant__05_life.jpg?v=1788517664\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eBreathable mid-weight knit.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eWash cold, air dry, iron low.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Loose, regular\u003c\/li\u003e\n\u003cli\u003eNeckline: Round neck\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter, spring\u003c\/li\u003e\n\u003cli\u003eOccasion: Work, weekend, everyday\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"109.99\" data-was=\"\" data-sizes='[\"XS\",\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"White\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/oy-elegant__c_white.jpg?v=1788573656\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\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"White \/ XS","offer_id":60650065592654,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ S","offer_id":60650065625422,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ M","offer_id":60650065658190,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ L","offer_id":60650065690958,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ XL","offer_id":60650065723726,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ 2XL","offer_id":60650065756494,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/oy-elegant__01_studio.jpg?v=1788638315"},{"product_id":"primrose-ruffled-mesh-knit-zip-cardigan","title":"Primrose - Ruffled Mesh Knit Zip Cardigan","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Zip Cardigan With Ruffles Down The Front\u003c\/h2\u003e\n\u003cp\u003eThe Primrose is the one that is not trying to be quiet. A stand collar frames the face, ruffle detailing runs the length of the zip, and the knit is worked as an open mesh so the whole thing stays light. A double-ended metal zip lets it open from the top or the bottom.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/oy-pink__04_life.jpg?v=1788517677\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStand collar: Frames the face and holds its shape.\u003c\/li\u003e\n\u003cli\u003eRuffle detailing: Runs the full length of the zip on both sides.\u003c\/li\u003e\n\u003cli\u003eOpen mesh knit: Light and airy rather than dense.\u003c\/li\u003e\n\u003cli\u003eDouble-ended metal zip: Opens from top or bottom.\u003c\/li\u003e\n\u003cli\u003eFitted cut: Follows the body through the waist.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/oy-pink__05_life.jpg?v=1788517678\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eSoft open mesh knit.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eWash cold, air dry, iron low.\u003c\/p\u003e\n\u003cp\u003eHand wash cold with a mild detergent, or use a mesh bag on a delicate cycle. Do not wring or tumble dry. Hang to dry in the shade. Iron on low through a cloth.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Fitted\u003c\/li\u003e\n\u003cli\u003eCollar: Stand collar\u003c\/li\u003e\n\u003cli\u003eClosure: Double-ended metal zip\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve\u003c\/li\u003e\n\u003cli\u003eSeason: Spring, autumn\u003c\/li\u003e\n\u003cli\u003eOccasion: Evening, weekend, work\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\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\" focusable=\"false\"\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-t\"\u003eSize Guide\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 (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;\"\u003eSHOULDER (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSHOULDER (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSLEEVE (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSLEEVE (in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLENGTH (cm)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLENGTH (in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e85\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e33.5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e35.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e14.1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e58\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e50\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e19.7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eM\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e90\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e35.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e37\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e14.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e59\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e52\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e20.5\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;\"\u003e95\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e37.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e38.2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e15.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e60\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e23.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e54\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e21.3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\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;\"\u003e39.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e15.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\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e56\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e105\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e41.3\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e40.6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e16.0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e62\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e24.4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e58\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e22.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 and given in centimetres, with the inch equivalent alongside. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"109.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Pink\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/oy-pink__c_pink.jpg?v=1788574099\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__none\"\u003eWe only publish a fit verdict when the maker publishes measurements for it. Check the Size Guide below for this piece, and email us if you are between two sizes.\u003c\/p\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Pink \/ S","offer_id":60650067951950,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ M","offer_id":60650067984718,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ L","offer_id":60650068017486,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ XL","offer_id":60650068050254,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ 2XL","offer_id":60650068083022,"sku":null,"price":109.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/oy-pink__01_studio.jpg?v=1788638305"},{"product_id":"edith-plain-roll-neck-sweater","title":"Edith - Plain Roll-Neck Sweater","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA Roll Neck With Nothing On It\u003c\/h2\u003e\n\u003cp\u003eThe Edith is deliberately plain. A raised roll neck, an even front with no pattern or trim, long sleeves to the wrist and a straight hem. The line runs tidily from shoulder to hem, which is what lets it disappear under a coat or carry an outfit on its own.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-turtleneck__04_life.jpg?v=1788517699\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised roll neck: A high neckline with a neat finish.\u003c\/li\u003e\n\u003cli\u003ePlain exterior: No pattern, no visible detailing.\u003c\/li\u003e\n\u003cli\u003eLong sleeves: Reach the wrist with straight cuffs.\u003c\/li\u003e\n\u003cli\u003eStraight hem: Completes a clean vertical line.\u003c\/li\u003e\n\u003cli\u003eTen colourways: Black, blue, coffee, dark grey, fuchsia, green, khaki, navy, red and white.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-turtleneck__05_life.jpg?v=1788517700\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eSoft mid-weight knit.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold, dry flat.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Regular\u003c\/li\u003e\n\u003cli\u003eNeckline: Roll neck\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve, straight cuff\u003c\/li\u003e\n\u003cli\u003eLength: Straight hem\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter\u003c\/li\u003e\n\u003cli\u003eOccasion: Work, everyday, layering\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\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\" focusable=\"false\"\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-t\"\u003eSize Guide\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cdiv class=\"slt-scroll\"\u003e\u003ctable style=\"width:100%;border-collapse:collapse;text-align:center;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#f7f7f7;\"\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSize\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eLength (cm \/ in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBust (cm \/ in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eShoulder (cm \/ in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve Length (cm \/ in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e63 \/ 24,8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e76 \/ 29,9\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e33 \/ 13,0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e61 \/ 24,0\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;\"\u003e64 \/ 25,2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e80 \/ 31,5\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e34 \/ 13,4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e62 \/ 24,4\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;\"\u003e65 \/ 25,6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e84 \/ 33,1\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e35 \/ 13,8\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e63 \/ 24,8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e66 \/ 26,0\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e88 \/ 34,6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e36 \/ 14,2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e64 \/ 25,2\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e2XL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e67 \/ 26,4\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e92 \/ 36,2\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e37 \/ 14,6\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\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 and given in centimetres, with the inch equivalent alongside. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"54.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-turtleneck__c_black.jpg?v=1788517699\u0026amp;width=96\"},{\"v\":\"Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-turtleneck__c_blue.jpg?v=1788517699\u0026amp;width=96\"},{\"v\":\"Coffee\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-turtleneck__c_coffee.jpg?v=1788517699\u0026amp;width=96\"},{\"v\":\"Dark grey\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-turtleneck__c_dark-grey.jpg?v=1788517699\u0026amp;width=96\"},{\"v\":\"Fuchsia\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-turtleneck__c_fuchsia.jpg?v=1788517699\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-turtleneck__c_green.jpg?v=1788517699\u0026amp;width=96\"},{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-turtleneck__c_khaki.jpg?v=1788517699\u0026amp;width=96\"},{\"v\":\"Navy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-turtleneck__c_navy.jpg?v=1788573790\u0026amp;width=96\"},{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-turtleneck__c_red.jpg?v=1788517699\u0026amp;width=96\"},{\"v\":\"White\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-turtleneck__c_white.jpg?v=1788517699\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__none\"\u003eWe only publish a fit verdict when the maker publishes measurements for it. Check the Size Guide below for this piece, and email us if you are between two sizes.\u003c\/p\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Black \/ S","offer_id":60650069983566,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ S","offer_id":60650070016334,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Coffee \/ S","offer_id":60650070049102,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Dark grey \/ S","offer_id":60650070081870,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Fuchsia \/ S","offer_id":60650070114638,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ S","offer_id":60650070147406,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Khaki \/ S","offer_id":60650070180174,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ S","offer_id":60650070212942,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ S","offer_id":60650070245710,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ S","offer_id":60650070278478,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ M","offer_id":60650070311246,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ M","offer_id":60650070344014,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Coffee \/ M","offer_id":60650070376782,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Dark grey \/ M","offer_id":60650070409550,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Fuchsia \/ M","offer_id":60650070442318,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ M","offer_id":60650070475086,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Khaki \/ M","offer_id":60650070507854,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ M","offer_id":60650070540622,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ M","offer_id":60650070573390,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ M","offer_id":60650070606158,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ L","offer_id":60650070638926,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ L","offer_id":60650070671694,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Coffee \/ L","offer_id":60650070704462,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Dark grey \/ L","offer_id":60650070737230,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Fuchsia \/ L","offer_id":60650070769998,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ L","offer_id":60650070802766,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Khaki \/ L","offer_id":60650070835534,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ L","offer_id":60650070868302,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ L","offer_id":60650070901070,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ L","offer_id":60650070933838,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ XL","offer_id":60650070966606,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ XL","offer_id":60650070999374,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Coffee \/ XL","offer_id":60650071032142,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Dark grey \/ XL","offer_id":60650071064910,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Fuchsia \/ XL","offer_id":60650071097678,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ XL","offer_id":60650071130446,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Khaki \/ XL","offer_id":60650071163214,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ XL","offer_id":60650071195982,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ XL","offer_id":60650071228750,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ XL","offer_id":60650071261518,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ 2XL","offer_id":60650071294286,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ 2XL","offer_id":60650071327054,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Coffee \/ 2XL","offer_id":60650071359822,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Dark grey \/ 2XL","offer_id":60650071392590,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Fuchsia \/ 2XL","offer_id":60650071425358,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ 2XL","offer_id":60650071458126,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Khaki \/ 2XL","offer_id":60650071490894,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ 2XL","offer_id":60650071523662,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ 2XL","offer_id":60650071556430,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ 2XL","offer_id":60650071589198,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-turtleneck__01_studio.jpg?v=1788638295"},{"product_id":"marguerite-chevron-textured-v-neck-sweater","title":"Marguerite - Chevron Textured V-Neck Sweater","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eThree Knits In One Sweater\u003c\/h2\u003e\n\u003cp\u003eThe Marguerite mixes its textures on purpose. Angled chevron panels run across the front, the sleeves and sides carry a contrasting stitch, and the shoulders drop to keep it relaxed. A soft V neckline stops the whole thing from reading busy.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-v__04_life.jpg?v=1788517723\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eChevron front panels: Angled knit creates a V pattern across the chest.\u003c\/li\u003e\n\u003cli\u003eContrasting stitch: Sleeves and side panels worked in a different texture.\u003c\/li\u003e\n\u003cli\u003eDropped shoulders: An easy, unstructured shoulder line.\u003c\/li\u003e\n\u003cli\u003eSoft V neckline: Open but not deep.\u003c\/li\u003e\n\u003cli\u003eSix colourways: Brown, white, grey, green, black and beige.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-v__05_life.jpg?v=1788517723\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eMixed-texture mid-weight knit.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold, dry flat.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Relaxed\u003c\/li\u003e\n\u003cli\u003eNeckline: V-neck\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve, dropped shoulder\u003c\/li\u003e\n\u003cli\u003eLength: Straight hem\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter\u003c\/li\u003e\n\u003cli\u003eOccasion: Weekend, work, everyday\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails id=\"slt-size-guide\"\u003e\u003csummary\u003e\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\" focusable=\"false\"\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-t\"\u003eSize Guide\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;\"\u003eFront Length (cm\/in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eBack Length (cm\/in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eChest Width (cm\/in)\u003c\/th\u003e\n\u003cth style=\"border:1px solid #ddd;padding:6px;\"\u003eSleeve Length (cm\/in)\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eS\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e62 \/ 24.41\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e67.5 \/ 26.57\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e52 \/ 20.47\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e48 \/ 18.90\"\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;\"\u003e63.5 \/ 25.00\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e69 \/ 27.17\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e54 \/ 21.26\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e49 \/ 19.29\"\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;\"\u003e65 \/ 25.59\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e70.5 \/ 27.76\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e56 \/ 22.05\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e50 \/ 19.69\"\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background:#fafafa;\"\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003eXL\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e66.5 \/ 26.18\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e72 \/ 28.35\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e58 \/ 22.83\"\u003c\/td\u003e\n\u003ctd style=\"border:1px solid #ddd;padding:6px;\"\u003e51 \/ 20.08\"\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp class=\"slt-note\"\u003eMeasurements are taken flat from the garment and given in centimetres, with the inch equivalent alongside. If you are between two sizes, take the larger one.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\u003csvg viewbox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !important;border:0 !important;color:#fff !important;\n  border-radius:14px !important;}\n.shopify-payment-button,\n.shopify-payment-button__button{display:none !important;}\n\u003c\/style\u003e\u003cdiv class=\"slt-src\" data-now=\"69.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Brown\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-v__c_brown.jpg?v=1788517723\u0026amp;width=96\"},{\"v\":\"White\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-v__c_white.jpg?v=1788517723\u0026amp;width=96\"},{\"v\":\"Grey\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-v__c_grey.jpg?v=1788517723\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-v__c_green.jpg?v=1788517723\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-v__c_black.jpg?v=1788517723\u0026amp;width=96\"},{\"v\":\"Beige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-v__c_beige.jpg?v=1788574007\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__none\"\u003eWe only publish a fit verdict when the maker publishes measurements for it. Check the Size Guide below for this piece, and email us if you are between two sizes.\u003c\/p\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Brown \/ S","offer_id":60650073489742,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Brown \/ M","offer_id":60650073522510,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Brown \/ L","offer_id":60650073555278,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Brown \/ XL","offer_id":60650073588046,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Brown \/ 2XL","offer_id":60650073620814,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ S","offer_id":60650073653582,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ M","offer_id":60650073686350,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ L","offer_id":60650073719118,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ XL","offer_id":60650073751886,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ 2XL","offer_id":60650073784654,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Grey \/ S","offer_id":60650073817422,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Grey \/ M","offer_id":60650073850190,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Grey \/ L","offer_id":60650073882958,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Grey \/ XL","offer_id":60650073915726,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Grey \/ 2XL","offer_id":60650073948494,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ S","offer_id":60650073981262,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ M","offer_id":60650074014030,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ L","offer_id":60650074046798,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ XL","offer_id":60650074079566,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ 2XL","offer_id":60650074112334,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ S","offer_id":60650074145102,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ M","offer_id":60650074177870,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ L","offer_id":60650074210638,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ XL","offer_id":60650074243406,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ 2XL","offer_id":60650074276174,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ S","offer_id":60650074308942,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ M","offer_id":60650074341710,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ L","offer_id":60650074374478,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ XL","offer_id":60650074407246,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ 2XL","offer_id":60650074440014,"sku":null,"price":69.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/er-v__01_studio.jpg?v=1788638285"},{"product_id":"elowen-high-neck-knit-top","title":"Elowen - High-Neck Knit Top","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eA High Neck That Fixes Your Posture For You\u003c\/h2\u003e\n\u003cp\u003eThe Elowen is a knit top with a gently structured high neckline - it holds just enough to lift the line of the neck and shoulders. Fine enough to layer under a coat for the evening, tidy enough to wear with tailored trousers at a desk.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cw-evelina__04_life.jpg?v=1788517741\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStructured high neckline: Stands softly and lifts the line of the neck.\u003c\/li\u003e\n\u003cli\u003eSubtle surface texture: Visible in the knit rather than printed on.\u003c\/li\u003e\n\u003cli\u003eLayers cleanly: Slim enough to sit under a coat or blazer.\u003c\/li\u003e\n\u003cli\u003eLong sleeves: Full length with a neat cuff.\u003c\/li\u003e\n\u003cli\u003eThree colourways: Black, blue and white.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cw-evelina__05_life.jpg?v=1788517741\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eFine textured knit.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold, dry flat.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Close\u003c\/li\u003e\n\u003cli\u003eNeckline: High neck\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter, spring\u003c\/li\u003e\n\u003cli\u003eOccasion: Work, evening, everyday\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"54.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cw-evelina__c_black.jpg?v=1788573833\u0026amp;width=96\"},{\"v\":\"Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cw-evelina__c_blue.jpg?v=1788517741\u0026amp;width=96\"},{\"v\":\"White\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cw-evelina__c_white.jpg?v=1788517741\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\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\n  };\n  if (window.MutationObserver) {\n    try {\n      new MutationObserver(reobserve).observe(document.body,\n        {childList: true, subtree: true});\n    } catch (e) {}\n  }\n})();\n\u003c\/script\u003e","brand":"SOLTERI","offers":[{"title":"Black \/ S","offer_id":60650076111182,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ M","offer_id":60650076143950,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ L","offer_id":60650076176718,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ XL","offer_id":60650076209486,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ 2XL","offer_id":60650076242254,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ 3XL","offer_id":60650076275022,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ S","offer_id":60650076307790,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ M","offer_id":60650076340558,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ L","offer_id":60650076373326,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ XL","offer_id":60650076406094,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ 2XL","offer_id":60650076438862,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ 3XL","offer_id":60650076471630,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ S","offer_id":60650076504398,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ M","offer_id":60650076537166,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ L","offer_id":60650076569934,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ XL","offer_id":60650076602702,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ 2XL","offer_id":60650076635470,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ 3XL","offer_id":60650076668238,"sku":null,"price":54.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cw-evelina__01_studio.jpg?v=1788638272"},{"product_id":"beatrix-soft-crew-neck-sweater","title":"Beatrix - Soft Crew-Neck Sweater","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eLightweight Warmth With A Classic Crew Neck\u003c\/h2\u003e\n\u003cp\u003eThe Beatrix is the classic crew-neck sweater, cut to flatter rather than to swamp. It drapes softly, keeps its warmth without bulk, and works layered over a shirt in December or on its own in a cold office in May.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cw-clara__04_life.jpg?v=1788517761\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eClassic crew neckline: A timeless round neck with a ribbed trim.\u003c\/li\u003e\n\u003cli\u003eSoft, plush handle: Smooth against the skin.\u003c\/li\u003e\n\u003cli\u003eLightweight warmth: Warm without thickness under a coat.\u003c\/li\u003e\n\u003cli\u003eFlattering line: Follows the body without clinging.\u003c\/li\u003e\n\u003cli\u003eFive colourways: Khaki, blue, pink, grey and black.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cw-clara__05_life.jpg?v=1788517760\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eSoft plush blended knit.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003eHand wash cold, dry flat.\u003c\/p\u003e\n\u003cp\u003eHand wash cold, or use a delicates cycle. Do not wring. \u003cstrong\u003eDry flat\u003c\/strong\u003e — hanging a knit stretches it out of shape. Cool iron if needed.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eFit: Regular, flattering\u003c\/li\u003e\n\u003cli\u003eNeckline: Crew neck\u003c\/li\u003e\n\u003cli\u003eSleeve: Long sleeve\u003c\/li\u003e\n\u003cli\u003eSeason: Autumn, winter, spring\u003c\/li\u003e\n\u003cli\u003eOccasion: Work, everyday, weekend\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"64.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"2XL\",\"3XL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cw-clara__c_khaki_z.jpg?v=1789031300\u0026amp;width=96\"},{\"v\":\"Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cw-clara__c_blue_z.jpg?v=1789031301\u0026amp;width=96\"},{\"v\":\"Pink\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cw-clara__c_pink_z.jpg?v=1789031301\u0026amp;width=96\"},{\"v\":\"Gray\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cw-clara__c_gray_z.jpg?v=1789031301\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cw-clara__c_black_z.jpg?v=1789031301\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\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\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":60650078470478,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Khaki \/ M","offer_id":60650078503246,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Khaki \/ L","offer_id":60650078536014,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Khaki \/ XL","offer_id":60650078568782,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Khaki \/ 2XL","offer_id":60650078601550,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Khaki \/ 3XL","offer_id":60650078634318,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ S","offer_id":60650078667086,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ M","offer_id":60650078699854,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ L","offer_id":60650078732622,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ XL","offer_id":60650078765390,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ 2XL","offer_id":60650078798158,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ 3XL","offer_id":60650078830926,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ S","offer_id":60650078863694,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ M","offer_id":60650078896462,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ L","offer_id":60650078929230,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ XL","offer_id":60650078961998,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ 2XL","offer_id":60650078994766,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ 3XL","offer_id":60650079027534,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Gray \/ S","offer_id":60650079060302,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Gray \/ M","offer_id":60650079093070,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Gray \/ L","offer_id":60650079125838,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Gray \/ XL","offer_id":60650079158606,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Gray \/ 2XL","offer_id":60650079191374,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Gray \/ 3XL","offer_id":60650079224142,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ S","offer_id":60650079256910,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ M","offer_id":60650079289678,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ L","offer_id":60650079322446,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ XL","offer_id":60650079355214,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ 2XL","offer_id":60650079387982,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ 3XL","offer_id":60650079420750,"sku":null,"price":64.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/cw-clara__01_studio.jpg?v=1788638233"},{"product_id":"lucienne-mink-cashmere-roll-neck","title":"Lucienne - Mink-Soft Roll-Neck","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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15 3l5 2.5-1.5 4L17 9v12H7V9l-1.5.5L4 5.5 9 3a3 3 0 006 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDescription\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003ch2\u003eThe Roll-Neck That Is Not Scratchy\u003c\/h2\u003e\n\u003cp\u003eThe Lucienne is a fine-gauge roll-neck in a mink-ultra-soft blend. Close to the body without gripping it, soft enough to wear on bare skin, and thin enough to go under a blazer without adding a size.\u003c\/p\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__l01.jpg?v=1788613677\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMink-ultra-soft blend: soft against the neck, which is where it matters.\u003c\/li\u003e\n\u003cli\u003eFine gauge: layers under tailoring without bulking the shoulder.\u003c\/li\u003e\n\u003cli\u003eRoll neck that holds: does not collapse after an hour.\u003c\/li\u003e\n\u003cli\u003eClose cut: skims rather than clings.\u003c\/li\u003e\n\u003cli\u003eSizes S to XXXL.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"display: flex; justify-content: center;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__l02.jpg?v=1788613676\" style=\"max-height: 500px; max-width: 500px;\"\u003e\u003c\/div\u003e\n\u003cdetails\u003e\u003csummary\u003eSize Guide\u003c\/summary\u003e\u003cp\u003eAvailable sizes: S, M, L, XL, XXL, XXXL.\u003c\/p\u003e\n\u003cp\u003eWe do not yet have a measurement chart we can stand behind for this piece, so we are not printing one. Message us with your usual size and we will confirm the fit before you order.\u003c\/p\u003e\u003c\/details\u003e\n\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 7h18v13H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 7l4-4h10l4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M7 11.5h10M7 15.5h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eMaterial \u0026amp; Fabric\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eThe mill has not published a fibre composition for this piece. What we can say from the garment itself is on the Details and Size Guide rows — and if the exact composition matters to you, email \u003ca href=\"mailto:info@solteri.co\"\u003einfo@solteri.co\u003c\/a\u003e and we will get it from the maker before you order.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M4 6h16v13a1 1 0 01-1 1H5a1 1 0 01-1-1z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"13\" r=\"3.4\"\u003e\u003c\/circle\u003e\u003cpath d=\"M8.5 6L10 4h4l1.5 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eCare\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cp\u003eMachine wash cold on a gentle cycle with like colours. Do not bleach. Hang to dry — a tumble dryer shortens the life of the fabric. Cool iron if needed.\u003c\/p\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 11v5M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eDetails\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\u003cul\u003e\n\u003cli\u003eComposition: mink-cashmere blend\u003c\/li\u003e\n\u003cli\u003eNeckline: roll neck\u003c\/li\u003e\n\u003cli\u003eGauge: fine\u003c\/li\u003e\n\u003cli\u003eWeight: light\u003c\/li\u003e\n\u003cli\u003eFit: close\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\u003c\/details\u003e\u003cdetails\u003e\u003csummary\u003e\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\" focusable=\"false\"\u003e\u003cpath d=\"M3 6h11v10H3z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 9h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"7\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"17.5\" cy=\"18\" r=\"2\"\u003e\u003c\/circle\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 UK order\u003c\/strong\u003e, with no minimum and no\ndelivery line at checkout.\u003c\/p\u003e\n\u003cp\u003eOrder before 6:00 PM GMT 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 dispatch.\u003c\/p\u003e\n\u003cp\u003eWe ship with Royal Mail, Evri, DPD, Yodel and Parcelforce. Your tracking\nnumber is emailed the moment the parcel leaves us.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNothing is added on delivery\u003c\/strong\u003e — no duty, no handling\nfee. The price you paid at checkout is the whole price.\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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M3.5 10a9 9 0 1 1 1.6 6\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 5v5h5\"\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 Consumer law asks\nfor 14 — 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 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003crect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 10V7a4 4 0 018 0v3\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan class=\"slt-t\"\u003eSecure Payment\u003c\/span\u003e\u003cspan class=\"slt-x\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"slt-b\"\u003e\n\u003cp\u003ePay with Visa, Mastercard, American Express, Maestro, PayPal, Apple Pay\nor Google Pay. All prices are in GBP and include everything you owe.\u003c\/p\u003e\n\u003cp\u003eEvery transaction is encrypted and handled by established payment providers.\n\u003cstrong\u003eWe never see or store your card details.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"\/pages\/payment-policy\"\u003eRead the full payment policy\u003c\/a\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: Indigo, radius 14, never a pill. Buy it now is hidden. *\/\nform[action*=\"\/cart\/add\"] button[type=submit],\nform[action*=\"\/cart\/add\"] [name=add]{\n  background:#2B3A4F !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=\"57.99\" data-was=\"\" data-sizes='[\"S\",\"M\",\"L\",\"XL\",\"XXL\",\"XXXL\"]' data-swatches='{\"name\":\"Color\",\"opts\":[{\"v\":\"Camel\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s01_camel.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Sky Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s02_sky-blue.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s03_green.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Black\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s04_black.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Army Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s05_army-green.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Beige\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s06_beige.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Pink\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s07_pink.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Grey\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s08_grey.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s09_blue.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Khaki\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s10_khaki.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Orange\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s11_orange.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Lavender\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s12_lavender.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Navy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s13_navy.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s14_red.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Burgundy\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s15_burgundy.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"White\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s16_white.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Fuchsia\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s17_fuchsia.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Mint\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s18_mint.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Rose Red\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s19_rose-red.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Lake Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s20_lake-blue.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Royal Blue\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s21_royal-blue.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Light Green\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s22_light-green.jpg?v=1788613676\u0026amp;width=96\"},{\"v\":\"Violet\",\"img\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s23_violet.jpg?v=1788613676\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\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  var pending = null;\n  var reobserve = function(){\n    if (pending) return;\n    pending = setTimeout(function(){\n      pending = null;\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    }, 120);\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":60667094532430,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Camel \/ M","offer_id":60667094565198,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Camel \/ L","offer_id":60667094597966,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Camel \/ XL","offer_id":60667094630734,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Camel \/ XXL","offer_id":60667094663502,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Camel \/ XXXL","offer_id":60667094696270,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Sky Blue \/ S","offer_id":60667094729038,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Sky Blue \/ M","offer_id":60667094761806,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Sky Blue \/ L","offer_id":60667094794574,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Sky Blue \/ XL","offer_id":60667094827342,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Sky Blue \/ XXL","offer_id":60667094860110,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Sky Blue \/ XXXL","offer_id":60667094892878,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ S","offer_id":60667094925646,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ M","offer_id":60667094958414,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ L","offer_id":60667094991182,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ XL","offer_id":60667095023950,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ XXL","offer_id":60667095056718,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Green \/ XXXL","offer_id":60667095089486,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ S","offer_id":60667095122254,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ M","offer_id":60667095155022,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ L","offer_id":60667095187790,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ XL","offer_id":60667095220558,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ XXL","offer_id":60667095253326,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Black \/ XXXL","offer_id":60667095286094,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Army Green \/ S","offer_id":60667095318862,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Army Green \/ M","offer_id":60667095351630,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Army Green \/ L","offer_id":60667095384398,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Army Green \/ XL","offer_id":60667095417166,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Army Green \/ XXL","offer_id":60667095449934,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Army Green \/ XXXL","offer_id":60667095482702,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ S","offer_id":60667095515470,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ M","offer_id":60667095548238,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ L","offer_id":60667095581006,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ XL","offer_id":60667095613774,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ XXL","offer_id":60667095646542,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Beige \/ XXXL","offer_id":60667095679310,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ S","offer_id":60667095712078,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ M","offer_id":60667095744846,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ L","offer_id":60667095777614,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ XL","offer_id":60667095810382,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ XXL","offer_id":60667095843150,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Pink \/ XXXL","offer_id":60667095875918,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Grey \/ S","offer_id":60667095908686,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Grey \/ M","offer_id":60667095941454,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Grey \/ L","offer_id":60667095974222,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Grey \/ XL","offer_id":60667096006990,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Grey \/ XXL","offer_id":60667096039758,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Grey \/ XXXL","offer_id":60667096072526,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ S","offer_id":60667096105294,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ M","offer_id":60667096138062,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ L","offer_id":60667096170830,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ XL","offer_id":60667096203598,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ XXL","offer_id":60667096236366,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Blue \/ XXXL","offer_id":60667096269134,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Khaki \/ S","offer_id":60667096301902,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Khaki \/ M","offer_id":60667096334670,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Khaki \/ L","offer_id":60667096367438,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Khaki \/ XL","offer_id":60667096400206,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Khaki \/ XXL","offer_id":60667096432974,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Khaki \/ XXXL","offer_id":60667096465742,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Orange \/ S","offer_id":60667096498510,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Orange \/ M","offer_id":60667096531278,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Orange \/ L","offer_id":60667096564046,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Orange \/ XL","offer_id":60667096596814,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Orange \/ XXL","offer_id":60667096629582,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Orange \/ XXXL","offer_id":60667096662350,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Lavender \/ S","offer_id":60667096695118,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Lavender \/ M","offer_id":60667096727886,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Lavender \/ L","offer_id":60667096760654,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Lavender \/ XL","offer_id":60667096793422,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Lavender \/ XXL","offer_id":60667096826190,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Lavender \/ XXXL","offer_id":60667096858958,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ S","offer_id":60667096891726,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ M","offer_id":60667096924494,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ L","offer_id":60667096957262,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ XL","offer_id":60667096990030,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ XXL","offer_id":60667097022798,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Navy \/ XXXL","offer_id":60667097055566,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ S","offer_id":60667097088334,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ M","offer_id":60667097121102,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ L","offer_id":60667097153870,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ XL","offer_id":60667097186638,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ XXL","offer_id":60667097219406,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Red \/ XXXL","offer_id":60667097252174,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Burgundy \/ S","offer_id":60667097284942,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Burgundy \/ M","offer_id":60667097317710,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Burgundy \/ L","offer_id":60667097350478,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Burgundy \/ XL","offer_id":60667097383246,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Burgundy \/ XXL","offer_id":60667097416014,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Burgundy \/ XXXL","offer_id":60667097448782,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ S","offer_id":60667097481550,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ M","offer_id":60667097514318,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ L","offer_id":60667097547086,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ XL","offer_id":60667097579854,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ XXL","offer_id":60667097612622,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"White \/ XXXL","offer_id":60667097645390,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Fuchsia \/ S","offer_id":60667097678158,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Fuchsia \/ M","offer_id":60667097710926,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Fuchsia \/ L","offer_id":60667097743694,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Fuchsia \/ XL","offer_id":60667097776462,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Fuchsia \/ XXL","offer_id":60667097809230,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Fuchsia \/ XXXL","offer_id":60667097841998,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Mint \/ S","offer_id":60667097874766,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Mint \/ M","offer_id":60667097907534,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Mint \/ L","offer_id":60667097940302,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Mint \/ XL","offer_id":60667097973070,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Mint \/ XXL","offer_id":60667098005838,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Mint \/ XXXL","offer_id":60667098038606,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Rose Red \/ S","offer_id":60667098071374,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Rose Red \/ M","offer_id":60667098104142,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Rose Red \/ L","offer_id":60667098136910,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Rose Red \/ XL","offer_id":60667098169678,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Rose Red \/ XXL","offer_id":60667098202446,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Rose Red \/ XXXL","offer_id":60667098235214,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Lake Blue \/ S","offer_id":60667098267982,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Lake Blue \/ M","offer_id":60667098300750,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Lake Blue \/ L","offer_id":60667098333518,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Lake Blue \/ XL","offer_id":60667098366286,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Lake Blue \/ XXL","offer_id":60667098399054,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Lake Blue \/ XXXL","offer_id":60667098431822,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Royal Blue \/ S","offer_id":60667098464590,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Royal Blue \/ M","offer_id":60667098497358,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Royal Blue \/ L","offer_id":60667098530126,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Royal Blue \/ XL","offer_id":60667098562894,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Royal Blue \/ XXL","offer_id":60667098595662,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Royal Blue \/ XXXL","offer_id":60667098628430,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Light Green \/ S","offer_id":60667098661198,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Light Green \/ M","offer_id":60667098693966,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Light Green \/ L","offer_id":60667098726734,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Light Green \/ XL","offer_id":60667098759502,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Light Green \/ XXL","offer_id":60667098792270,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Light Green \/ XXXL","offer_id":60667098825038,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Violet \/ S","offer_id":60667098857806,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Violet \/ M","offer_id":60667098890574,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Violet \/ L","offer_id":60667098923342,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Violet \/ XL","offer_id":60667098956110,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Violet \/ XXL","offer_id":60667098988878,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true},{"title":"Violet \/ XXXL","offer_id":60667099021646,"sku":null,"price":57.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1073\/9168\/0846\/files\/lucienne-mink-cashmere-roll-neck__s01_camel.jpg?v=1788613676"}],"url":"https:\/\/www.solteri.co\/collections\/women-knitwear.oembed","provider":"SOLTERI","version":"1.0","type":"link"}