{"product_id":"upholstery-carpet-cleaner","title":"Upholstery \u0026 Carpet Cleaner","description":"\n\u003csection class=\"sfy\" id=\"solveo-safy\"\u003e\n  \u003cdiv class=\"sfy-wrap\"\u003e\n\n    \u003c!-- HERO --\u003e\n    \u003cheader class=\"sfy-hero\"\u003e\n      \u003cspan class=\"sfy-pill\"\u003e✦ SOLVEO \/ HOME \u0026amp; FABRIC CARE\u003c\/span\u003e\n      \u003cp class=\"sfy-kicker\"\u003eTHE ART OF EVERYDAY REFRESHMENT\u003c\/p\u003e\n      \u003ch2\u003eEveryday living.\u003cem\u003eBeautifully refreshed.\u003c\/em\u003e\n\u003c\/h2\u003e\n      \u003cp class=\"sfy-lead\"\u003e\n        Meet \u003cstrong\u003eSAFY Upholstery \u0026amp; Carpet Cleaner\u003c\/strong\u003e —\n        a dedicated 450 ml aerosol cleaner designed to help\n        tackle stains, ingrained dirt and everyday grime\n        on compatible fabric surfaces.\n      \u003c\/p\u003e\n      \u003cdiv class=\"sfy-actions\"\u003e\n        \u003ca href=\"#sfy-shop\" class=\"sfy-btn\"\u003eDISCOVER SAFY \u003cspan\u003e↗\u003c\/span\u003e\u003c\/a\u003e\n        \u003ca href=\"#sfy-features\" class=\"sfy-link\"\u003eExplore the benefits ↓\u003c\/a\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"sfy-stats\"\u003e\n        \u003cdiv\u003e\n\u003cstrong\u003e450 ML\u003c\/strong\u003e\u003csmall\u003eAEROSOL CLEANER\u003c\/small\u003e\n\u003c\/div\u003e\n        \u003cdiv\u003e\n\u003cstrong\u003eFABRIC\u003c\/strong\u003e\u003csmall\u003eDEDICATED CARE\u003c\/small\u003e\n\u003c\/div\u003e\n        \u003cdiv\u003e\n\u003cstrong\u003eHOME + CAR\u003c\/strong\u003e\u003csmall\u003eVERSATILE USE\u003c\/small\u003e\n\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/header\u003e\n\n    \u003c!-- DECORATIVE PRODUCT SHOWCASE --\u003e\n    \u003cdiv class=\"sfy-stage\"\u003e\n      \u003cdiv class=\"sfy-stage-top\"\u003e\n\u003cspan\u003eTHE FABRIC CARE EDIT\u003c\/span\u003e\u003cspan\u003eSAFY \/ 450 ML\u003c\/span\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"sfy-orbit sfy-orbit-a\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"sfy-orbit sfy-orbit-b\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"sfy-glow\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"sfy-spark sfy-spark-a\"\u003e✦\u003c\/div\u003e\n      \u003cdiv class=\"sfy-spark sfy-spark-b\"\u003e✧\u003c\/div\u003e\n\n      \u003cdiv class=\"sfy-product\" aria-hidden=\"true\"\u003e\n        \u003cdiv class=\"sfy-cap\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"sfy-rim\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"sfy-can\"\u003e\n          \u003cdiv class=\"sfy-can-shine\"\u003e\u003c\/div\u003e\n          \u003cdiv class=\"sfy-can-label\"\u003e\n            \u003cspan\u003eFABRIC CARE COLLECTION\u003c\/span\u003e\n            \u003cstrong\u003eSAFY\u003c\/strong\u003e\n            \u003cdiv class=\"sfy-rule\"\u003e\u003c\/div\u003e\n            \u003cb\u003eUPHOLSTERY \u0026amp;\u003c\/b\u003e\n            \u003cb\u003eCARPET CLEANER\u003c\/b\u003e\n            \u003csmall\u003e450 ML\u003c\/small\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"sfy-can-base\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"sfy-stage-bottom\"\u003e\n        \u003cstrong\u003eLIVE IN IT. LOVE IT. REFRESH IT.\u003c\/strong\u003e\n        \u003cspan\u003eHOME • FABRIC • INTERIOR\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- INTRO --\u003e\n    \u003csection class=\"sfy-intro\"\u003e\n      \u003cspan class=\"sfy-kicker\"\u003eCARE FOR THE SPACES YOU LOVE\u003c\/span\u003e\n      \u003ch2\u003eLife leaves its mark.\u003cem\u003eA little care makes a difference.\u003c\/em\u003e\n\u003c\/h2\u003e\n      \u003cp\u003e\n        From your favourite armchair to the carpet beneath\n        your feet, everyday life can leave fabric surfaces\n        looking tired. SAFY helps tackle compatible\n        upholstery and carpet cleaning jobs, bringing\n        dedicated fabric care into your routine.\n      \u003c\/p\u003e\n    \u003c\/section\u003e\n\n    \u003c!-- FEATURES --\u003e\n    \u003csection class=\"sfy-features\" id=\"sfy-features\"\u003e\n      \u003cdiv class=\"sfy-section-head\"\u003e\n        \u003cspan class=\"sfy-kicker\"\u003eTHOUGHTFUL FABRIC CARE\u003c\/span\u003e\n        \u003ch2\u003eFor the places\u003cem\u003ewhere life happens.\u003c\/em\u003e\n\u003c\/h2\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"sfy-grid\"\u003e\n        \u003carticle class=\"sfy-card\"\u003e\n          \u003cspan class=\"sfy-no\"\u003e01 \/ 05\u003c\/span\u003e\n          \u003cdiv class=\"sfy-icon\"\u003e✧\u003c\/div\u003e\n          \u003cspan class=\"sfy-tag\"\u003eDIRT \u0026amp; STAIN CLEANING\u003c\/span\u003e\n          \u003ch3\u003eBeyond Surface Dirt\u003c\/h3\u003e\n          \u003cp\u003eDesigned to help remove visible marks, ingrained grime and everyday stains from compatible fabrics.\u003c\/p\u003e\n        \u003c\/article\u003e\n        \u003carticle class=\"sfy-card\"\u003e\n          \u003cspan class=\"sfy-no\"\u003e02 \/ 05\u003c\/span\u003e\n          \u003cdiv class=\"sfy-icon\"\u003e◇\u003c\/div\u003e\n          \u003cspan class=\"sfy-tag\"\u003eUPHOLSTERY CARE\u003c\/span\u003e\n          \u003ch3\u003eRefresh Your Favourite Seat\u003c\/h3\u003e\n          \u003cp\u003eA practical option for suitable velour and cloth upholstery, subject to fabric-care instructions and product compatibility.\u003c\/p\u003e\n        \u003c\/article\u003e\n        \u003carticle class=\"sfy-card\"\u003e\n          \u003cspan class=\"sfy-no\"\u003e03 \/ 05\u003c\/span\u003e\n          \u003cdiv class=\"sfy-icon\"\u003e▦\u003c\/div\u003e\n          \u003cspan class=\"sfy-tag\"\u003eCARPET CLEANING\u003c\/span\u003e\n          \u003ch3\u003eCare for Everyday Floors\u003c\/h3\u003e\n          \u003cp\u003eGive compatible carpets and floor mats dedicated attention when daily foot traffic leaves its mark.\u003c\/p\u003e\n        \u003c\/article\u003e\n        \u003carticle class=\"sfy-card\"\u003e\n          \u003cspan class=\"sfy-no\"\u003e04 \/ 05\u003c\/span\u003e\n          \u003cdiv class=\"sfy-icon\"\u003e↗\u003c\/div\u003e\n          \u003cspan class=\"sfy-tag\"\u003eCAR INTERIOR CARE\u003c\/span\u003e\n          \u003ch3\u003eTake the Refresh on the Road\u003c\/h3\u003e\n          \u003cp\u003eUseful for label-approved vehicle upholstery, floor mats and compatible interior materials.\u003c\/p\u003e\n        \u003c\/article\u003e\n        \u003carticle class=\"sfy-card sfy-card-wide\"\u003e\n          \u003cspan class=\"sfy-no\"\u003e05 \/ 05\u003c\/span\u003e\n          \u003cdiv class=\"sfy-icon\"\u003e≋\u003c\/div\u003e\n          \u003cspan class=\"sfy-tag\"\u003e450 ML AEROSOL FORMAT\u003c\/span\u003e\n          \u003ch3\u003eConvenient, Dedicated Cleaning\u003c\/h3\u003e\n          \u003cp\u003eKeep a 450 ml can ready in your cleaning cupboard for the fabric-care tasks that need more than a quick tidy. Apply and allow to dry according to the product label.\u003c\/p\u003e\n        \u003c\/article\u003e\n      \u003c\/div\u003e\n    \u003c\/section\u003e\n\n    \u003c!-- INTERACTIVE FABRIC DEMO --\u003e\n    \u003csection class=\"sfy-demo\"\u003e\n      \u003cdiv class=\"sfy-section-head\"\u003e\n        \u003cspan class=\"sfy-kicker\"\u003eTHE WEEKEND RESET\u003c\/span\u003e\n        \u003ch2\u003eFrom everyday marks\u003cem\u003eto a refreshed feel.\u003c\/em\u003e\n\u003c\/h2\u003e\n        \u003cp\u003eExplore a decorative before-and-after fabric-care illustration.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"sfy-demo-panel\"\u003e\n        \u003cdiv class=\"sfy-demo-top\"\u003e\n          \u003cspan\u003eILLUSTRATIVE FABRIC VISUAL\u003c\/span\u003e\n          \u003cspan class=\"sfy-status\"\u003eBEFORE CLEANING\u003c\/span\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"sfy-fabric\" data-clean=\"false\"\u003e\n          \u003cdiv class=\"sfy-weave\"\u003e\u003c\/div\u003e\n          \u003cdiv class=\"sfy-stain sfy-stain-a\"\u003e\u003c\/div\u003e\n          \u003cdiv class=\"sfy-stain sfy-stain-b\"\u003e\u003c\/div\u003e\n          \u003cdiv class=\"sfy-stain sfy-stain-c\"\u003e\u003c\/div\u003e\n          \u003cdiv class=\"sfy-stain sfy-stain-d\"\u003e\u003c\/div\u003e\n          \u003cdiv class=\"sfy-clean-star sfy-clean-star-a\"\u003e✦\u003c\/div\u003e\n          \u003cdiv class=\"sfy-clean-star sfy-clean-star-b\"\u003e✧\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"sfy-demo-bottom\"\u003e\n          \u003cp class=\"sfy-caption\"\u003eEveryday use can leave marks and ingrained dirt on fabric surfaces.\u003c\/p\u003e\n          \u003cbutton type=\"button\" class=\"sfy-toggle\"\u003eVIEW REFRESHED FABRIC ↗\u003c\/button\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cp class=\"sfy-disclaimer\"\u003e\n        Illustrative visual only. Actual results depend on the\n        stain, fabric, application and cleaning method.\n      \u003c\/p\u003e\n    \u003c\/section\u003e\n\n    \u003c!-- LIFESTYLE --\u003e\n    \u003csection class=\"sfy-uses\"\u003e\n      \u003cdiv class=\"sfy-section-head\"\u003e\n        \u003cspan class=\"sfy-kicker\"\u003eFROM LIVING ROOM TO CAR INTERIOR\u003c\/span\u003e\n        \u003ch2\u003eA little care.\u003cem\u003eAcross the spaces you love.\u003c\/em\u003e\n\u003c\/h2\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"sfy-use-grid\"\u003e\n        \u003carticle\u003e\u003cspan\u003e01\u003c\/span\u003e\u003ch3\u003eArmchairs \u0026amp; Sofas\u003c\/h3\u003e\n\u003cp\u003eCare for compatible upholstered seating.\u003c\/p\u003e\u003c\/article\u003e\n        \u003carticle\u003e\u003cspan\u003e02\u003c\/span\u003e\u003ch3\u003eCarpets \u0026amp; Rugs\u003c\/h3\u003e\n\u003cp\u003eRefresh label-approved floor fabrics.\u003c\/p\u003e\u003c\/article\u003e\n        \u003carticle\u003e\u003cspan\u003e03\u003c\/span\u003e\u003ch3\u003eCar Seats\u003c\/h3\u003e\n\u003cp\u003eGive suitable cloth interiors extra attention.\u003c\/p\u003e\u003c\/article\u003e\n        \u003carticle\u003e\u003cspan\u003e04\u003c\/span\u003e\u003ch3\u003eFloor Mats\u003c\/h3\u003e\n\u003cp\u003eHelp tackle everyday dirt from life on the move.\u003c\/p\u003e\u003c\/article\u003e\n      \u003c\/div\u003e\n    \u003c\/section\u003e\n\n    \u003c!-- CARE GUIDANCE --\u003e\n    \u003csection class=\"sfy-care\"\u003e\n      \u003cdiv class=\"sfy-care-icon\"\u003e✧\u003c\/div\u003e\n      \u003cdiv\u003e\n        \u003cspan class=\"sfy-kicker\"\u003eCARE THAT STARTS WITH THE LABEL\u003c\/span\u003e\n        \u003ch3\u003eTest first. Treat with care.\u003c\/h3\u003e\n        \u003cp\u003e\n          Check the fabric's care instructions and the product label\n          before use. Test on a small, hidden area for compatibility\n          and colourfastness. Follow the manufacturer's application,\n          ventilation, drying and aerosol safety instructions.\n          Keep away from heat, sparks and open flames.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/section\u003e\n\n    \u003c!-- CTA --\u003e\n    \u003csection class=\"sfy-cta\" id=\"sfy-shop\"\u003e\n      \u003cspan class=\"sfy-kicker\"\u003eSAFY UPHOLSTERY \u0026amp; CARPET CLEANER \/ 450 ML\u003c\/span\u003e\n      \u003ch2\u003eLive in it. Love it.\u003cem\u003eGive it a refresh.\u003c\/em\u003e\n\u003c\/h2\u003e\n      \u003cp\u003e\n        Dedicated fabric care for compatible upholstery,\n        carpets and car interiors — because the spaces\n        you love deserve a little attention.\n      \u003c\/p\u003e\n      \u003ca class=\"sfy-btn sfy-shop-btn\" href=\"{{%20product.url%20|%20default:%20'\/collections\/house-cleaning'%20}}\"\u003e\n        SHOP SAFY CLEANER \u003cspan\u003e↗\u003c\/span\u003e\n      \u003c\/a\u003e\n      \u003csmall\u003eSECURE CHECKOUT • SOUTH AFRICAN STORE\u003c\/small\u003e\n    \u003c\/section\u003e\n\n    \u003cfooter class=\"sfy-footer\"\u003e\n      \u003cstrong\u003eSOLVEO™\u003c\/strong\u003e\n      \u003cspan\u003eEVERYDAY SOLUTIONS. REFINED.\u003c\/span\u003e\n    \u003c\/footer\u003e\n\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003cstyle\u003e\n.sfy{\n  --ink:#3c4841;--muted:#7d8b82;--sage:#799581;\n  --taupe:#b09d87;--line:#e5e9e1;\n  font-family:Arial,Helvetica,sans-serif;\n  background:linear-gradient(155deg,#fff,#f6f7f2 55%,#fff);\n  color:var(--ink);padding:75px 20px 25px;\n  line-height:1.7;overflow:hidden;isolation:isolate;\n}\n.sfy *,.sfy *:before,.sfy *:after{box-sizing:border-box}\n.sfy a{text-decoration:none}\n.sfy h2,.sfy h3,.sfy p{margin-top:0}\n.sfy-wrap{max-width:1130px;margin:auto}\n.sfy-kicker,.sfy-tag{\n  color:#8c9d85;font-size:10px;\n  font-weight:800;letter-spacing:2px;\n}\n.sfy-hero{text-align:center;max-width:850px;margin:0 auto 55px}\n.sfy-pill{\n  display:inline-block;padding:9px 16px;\n  border:1px solid #e2e6dd;border-radius:50px;\n  color:#80937f;font-size:10px;\n  font-weight:800;letter-spacing:1.2px;\n  background:#fff;\n}\n.sfy-hero\u003e.sfy-kicker{margin:30px 0 15px}\n.sfy-hero h2{\n  font-size:clamp(42px,7vw,80px);\n  line-height:1.08;letter-spacing:-3px;margin-bottom:25px;\n}\n.sfy h2 em{display:block;font-style:normal;color:#8aa48e}\n.sfy-lead{\n  max-width:660px;margin:0 auto 30px;\n  color:var(--muted);font-size:17px;\n}\n.sfy-lead strong{color:var(--ink)}\n.sfy-actions{\n  display:flex;justify-content:center;align-items:center;\n  gap:22px;flex-wrap:wrap;\n}\n.sfy-btn{\n  display:inline-flex;align-items:center;justify-content:center;\n  gap:22px;padding:17px 26px;\n  border-radius:11px;background:#557663;\n  color:#fff!important;font-size:12px;\n  font-weight:900;letter-spacing:1px;\n  transition:transform .3s,background .3s;\n}\n.sfy-btn:hover{transform:translateY(-4px);background:#3e5c49}\n.sfy-btn span{font-size:20px}\n.sfy-link{color:#75947c!important;font-size:13px;font-weight:700}\n.sfy-stats{\n  display:grid;grid-template-columns:repeat(3,1fr);\n  max-width:730px;margin:45px auto 0;padding:20px 0;\n  border-block:1px solid var(--line);\n}\n.sfy-stats div{display:flex;flex-direction:column;padding:0 7px}\n.sfy-stats div+div{border-left:1px solid var(--line)}\n.sfy-stats strong{color:#71927b;font-size:20px}\n.sfy-stats small{color:#94a196;font-size:10px;letter-spacing:.8px}\n\n\/* SHOWCASE *\/\n.sfy-stage{\n  position:relative;min-height:470px;\n  display:flex;flex-direction:column;justify-content:space-between;\n  padding:24px;margin-bottom:105px;\n  border:1px solid #dfe6dc;border-radius:24px;\n  overflow:hidden;\n  background:radial-gradient(ellipse at center,#f4f0e9,#e7e8df 75%,#f9f8f4);\n}\n.sfy-stage-top,.sfy-stage-bottom{\n  position:relative;z-index:4;display:flex;\n  justify-content:space-between;gap:15px;\n  font-size:10px;letter-spacing:1.3px;\n  font-weight:800;color:#98a394;\n}\n.sfy-stage-bottom strong{color:#758d78}\n.sfy-orbit{\n  position:absolute;top:50%;left:50%;\n  transform:translate(-50%,-50%);\n  border:1px solid rgba(135,161,137,.22);\n  border-radius:50%;\n}\n.sfy-orbit-a{width:310px;height:310px}\n.sfy-orbit-b{width:440px;height:440px}\n.sfy-glow{\n  position:absolute;top:15%;left:calc(50% - 170px);\n  width:340px;height:340px;\n  background:rgba(255,255,255,.5);\n  border-radius:50%;filter:blur(60px);\n}\n.sfy-product{\n  position:relative;z-index:3;\n  display:flex;flex-direction:column;align-items:center;\n  margin:auto;transform:rotate(-8deg);\n  filter:drop-shadow(16px 19px 14px rgba(81,95,76,.18));\n  animation:sfyFloat 5s ease-in-out infinite;\n}\n@keyframes sfyFloat{\n  50%{transform:rotate(-8deg) translateY(-8px)}\n}\n.sfy-cap{\n  width:98px;height:55px;border-radius:13px 13px 4px 4px;\n  background:linear-gradient(90deg,#526d5c,#a4b6a2,#506a58);\n  border-bottom:4px solid #b5a18a;\n}\n.sfy-rim{width:83px;height:8px;background:#c9c8be;border-radius:3px}\n.sfy-can{\n  position:relative;width:145px;height:225px;\n  border:2px solid #c6c8bf;border-radius:13px 13px 17px 17px;\n  background:linear-gradient(90deg,#c2c6be,#fff 26%,#e7e9e3 72%,#b6bcb2);\n  display:grid;place-items:center;overflow:hidden;\n}\n.sfy-can-shine{\n  position:absolute;left:13px;top:0;\n  width:15px;height:100%;background:rgba(255,255,255,.35);\n}\n.sfy-can-label{\n  position:relative;z-index:2;width:115px;height:172px;\n  background:#f8f7f1;border:1px solid #d4d9ce;\n  display:flex;flex-direction:column;\n  justify-content:center;align-items:center;\n  text-align:center;padding:10px;\n}\n.sfy-can-label\u003espan{\n  color:#93a18d;font-size:7px;\n  font-weight:800;letter-spacing:1px;\n}\n.sfy-can-label strong{\n  color:#5d7c66;font-size:38px;\n  letter-spacing:2px;line-height:1.5;\n}\n.sfy-rule{width:55px;height:2px;background:#b5a28a;margin:8px 0 12px}\n.sfy-can-label b{\n  color:#617468;font-size:9px;\n  letter-spacing:.5px;\n}\n.sfy-can-label small{\n  color:#a08d73;font-size:12px;\n  font-weight:900;margin-top:16px;\n}\n.sfy-can-base{\n  width:132px;height:9px;\n  border-radius:0 0 50% 50%;background:#b5bcb3;\n}\n.sfy-spark{\n  position:absolute;color:#a9b99e;\n  font-size:25px;animation:sfySpark 3s infinite;\n}\n.sfy-spark-a{left:20%;top:25%}\n.sfy-spark-b{right:20%;bottom:25%;animation-delay:1s}\n@keyframes sfySpark{50%{opacity:.25;transform:scale(.7)}}\n\n\/* SECTIONS *\/\n.sfy-intro,.sfy-features,.sfy-demo,.sfy-uses{margin-bottom:105px}\n.sfy-intro h2,.sfy-section-head h2{\n  font-size:clamp(35px,5vw,59px);\n  line-height:1.13;letter-spacing:-2px;margin:15px 0 22px;\n}\n.sfy-intro\u003ep,.sfy-section-head\u003ep{\n  max-width:670px;color:var(--muted);\n  font-size:15px;line-height:1.85;\n}\n.sfy-section-head{margin-bottom:32px}\n\n\/* FEATURE CARDS *\/\n.sfy-grid{\n  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px;\n}\n.sfy-card{\n  position:relative;padding:32px;border-radius:18px;\n  background:#fff;border:1px solid var(--line);\n  transition:transform .3s,box-shadow .3s;\n}\n.sfy-card:hover{\n  transform:translateY(-5px);\n  box-shadow:0 15px 35px rgba(78,104,82,.08);\n}\n.sfy-card-wide{grid-column:span 2}\n.sfy-no{\n  position:absolute;right:26px;top:26px;\n  color:#a1afa3;font-size:10px;font-weight:800;\n}\n.sfy-icon{\n  width:49px;height:49px;border-radius:13px;\n  background:#edf3eb;display:grid;place-items:center;\n  color:#78977d;font-size:24px;margin-bottom:25px;\n}\n.sfy-tag{display:block;font-size:9px;margin-bottom:9px}\n.sfy-card h3{font-size:23px;margin-bottom:10px}\n.sfy-card p{color:var(--muted);font-size:14px;margin:0}\n\n\/* FABRIC DEMO *\/\n.sfy-demo-panel{\n  padding:19px;background:#f1f3ed;\n  border:1px solid #dfe7dc;border-radius:21px;\n}\n.sfy-demo-top{\n  display:flex;justify-content:space-between;\n  gap:10px;margin-bottom:17px;\n  color:#899b8c;font-size:10px;\n  font-weight:800;letter-spacing:1px;\n}\n.sfy-status{color:#78957b}\n.sfy-fabric{\n  position:relative;min-height:290px;\n  border-radius:14px;overflow:hidden;\n  background:#b9b3a7;\n  transition:background .8s;\n}\n.sfy-weave{\n  position:absolute;inset:0;\n  background:\n    repeating-linear-gradient(0deg,transparent 0 5px,rgba(255,255,255,.09) 5px 6px),\n    repeating-linear-gradient(90deg,transparent 0 5px,rgba(255,255,255,.09) 5px 6px);\n}\n.sfy-stain{\n  position:absolute;background:rgba(103,76,53,.43);\n  border-radius:45% 55% 60% 40%;\n  filter:blur(3px);\n  transition:opacity .8s,transform .8s;\n}\n.sfy-stain-a{width:120px;height:80px;left:14%;top:19%;transform:rotate(15deg)}\n.sfy-stain-b{width:95px;height:70px;right:20%;bottom:15%;transform:rotate(-12deg)}\n.sfy-stain-c{width:60px;height:85px;left:47%;bottom:18%}\n.sfy-stain-d{width:70px;height:45px;right:26%;top:12%}\n.sfy-clean-star{\n  position:absolute;color:#f5f9ee;\n  font-size:34px;opacity:0;transition:opacity .8s;\n}\n.sfy-clean-star-a{left:20%;top:26%}\n.sfy-clean-star-b{right:22%;bottom:25%}\n.sfy-fabric[data-clean=\"true\"]{background:#c9c8bc}\n.sfy-fabric[data-clean=\"true\"] .sfy-stain{\n  opacity:0;transform:scale(.1);\n}\n.sfy-fabric[data-clean=\"true\"] .sfy-clean-star{opacity:1}\n.sfy-demo-bottom{\n  display:flex;justify-content:space-between;\n  align-items:center;gap:20px;padding:19px 3px 0;\n}\n.sfy-caption{max-width:430px;color:#849388;font-size:13px;margin:0}\n.sfy-toggle{\n  border:0;border-radius:9px;background:#557663;\n  color:#fff;padding:14px 20px;\n  font-size:11px;font-weight:900;letter-spacing:.7px;\n  font-family:inherit;cursor:pointer;\n}\n.sfy-toggle:hover{background:#3e5c49}\n.sfy-toggle:focus-visible{outline:3px solid #b5a18a;outline-offset:3px}\n.sfy-disclaimer{font-size:11px;color:#8b9b8d;margin:14px 0 0}\n\n\/* LIFESTYLE *\/\n.sfy-use-grid{\n  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px;\n}\n.sfy-use-grid article{\n  padding:25px 19px;background:#fff;\n  border-top:2px solid #93ad96;border-radius:0 0 12px 12px;\n}\n.sfy-use-grid article\u003espan{\n  color:#78977d;font-size:11px;font-weight:800;\n}\n.sfy-use-grid h3{font-size:16px;margin:22px 0 8px}\n.sfy-use-grid p{font-size:13px;color:var(--muted);margin:0}\n\n\/* CARE *\/\n.sfy-care{\n  display:flex;align-items:flex-start;gap:20px;\n  padding:30px;background:#f9f8f1;\n  border:1px solid #e7e6d8;border-radius:17px;\n  margin-bottom:85px;\n}\n.sfy-care-icon{font-size:31px;color:#b2a188}\n.sfy-care h3{font-size:21px;margin:8px 0}\n.sfy-care p{font-size:13px;color:#85887b;margin:0}\n\n\/* CTA *\/\n.sfy-cta{\n  text-align:center;padding:80px 25px;\n  border:1px solid #dce5db;border-radius:24px;\n  background:radial-gradient(circle at top,#fff,#e4ede3);\n}\n.sfy-cta h2{\n  font-size:clamp(43px,6vw,72px);\n  line-height:1.1;letter-spacing:-3px;margin:18px 0;\n}\n.sfy-cta\u003ep{\n  max-width:560px;margin:0 auto 28px;\n  color:#7b8f7f;font-size:15px;\n}\n.sfy-shop-btn{min-width:255px}\n.sfy-cta small{\n  display:block;margin-top:22px;\n  color:#879c8c;font-size:10px;letter-spacing:1.3px;\n}\n.sfy-footer{\n  display:flex;justify-content:space-between;\n  gap:15px;padding:30px 4px 0;\n  color:#92a195;font-size:10px;letter-spacing:2px;\n}\n\n\/* RESPONSIVE *\/\n@media(max-width:850px){\n  .sfy-use-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\n}\n@media(max-width:600px){\n  .sfy{padding:47px 13px 20px}\n  .sfy-hero{margin-bottom:35px}\n  .sfy-pill{font-size:9px;letter-spacing:.6px}\n  .sfy-hero h2{\n    font-size:clamp(35px,9vw,50px);letter-spacing:-1.5px;\n  }\n  .sfy-lead{font-size:14px}\n  .sfy-actions{flex-direction:column;gap:14px}\n  .sfy-btn{width:100%}\n  .sfy-stats{margin-top:30px}\n  .sfy-stats strong{font-size:clamp(11px,3.4vw,17px)}\n  .sfy-stats small{font-size:9px}\n  .sfy-stage{\n    min-height:365px;padding:13px;\n    margin-bottom:70px;border-radius:17px;\n  }\n  .sfy-stage-top,.sfy-stage-bottom{font-size:8px;letter-spacing:.3px}\n  .sfy-stage-bottom{flex-direction:column;gap:3px}\n  .sfy-product{scale:.78}\n  .sfy-intro,.sfy-features,.sfy-demo,.sfy-uses{margin-bottom:70px}\n  .sfy-intro h2,.sfy-section-head h2{\n    font-size:clamp(30px,8vw,43px);letter-spacing:-1.2px;\n  }\n  .sfy-intro\u003ep,.sfy-section-head\u003ep{font-size:13px}\n  .sfy-grid{grid-template-columns:1fr;gap:11px}\n  .sfy-card,.sfy-card-wide{grid-column:auto;padding:24px}\n  .sfy-card h3{font-size:21px}\n  .sfy-card p{font-size:13px}\n  .sfy-demo-panel{padding:12px}\n  .sfy-demo-top{font-size:8px}\n  .sfy-fabric{min-height:230px}\n  .sfy-demo-bottom{flex-direction:column;align-items:stretch}\n  .sfy-toggle{width:100%}\n  .sfy-use-grid{gap:10px}\n  .sfy-use-grid article{padding:19px 13px}\n  .sfy-use-grid h3{font-size:14px}\n  .sfy-use-grid p{font-size:12px}\n  .sfy-care{padding:20px;gap:12px;margin-bottom:65px}\n  .sfy-care h3{font-size:18px}\n  .sfy-cta{padding:55px 18px}\n  .sfy-cta h2{\n    font-size:clamp(35px,9vw,52px);letter-spacing:-1.5px;\n  }\n  .sfy-cta\u003ep{font-size:13px}\n  .sfy-shop-btn{min-width:0}\n  .sfy-cta small{font-size:9px}\n  .sfy-footer{\n    flex-direction:column;align-items:center;\n    gap:4px;text-align:center;\n  }\n}\n@media(prefers-reduced-motion:reduce){\n  .sfy *,.sfy *:before,.sfy *:after{\n    animation:none!important;transition:none!important;\n  }\n}\n\u003c\/style\u003e\n\n\u003cscript\u003e\n(function(){\n  function initSafy(){\n    document.querySelectorAll('.sfy').forEach(function(root){\n      if(root.dataset.sfyReady==='true')return;\n      root.dataset.sfyReady='true';\n\n      var button=root.querySelector('.sfy-toggle');\n      var fabric=root.querySelector('.sfy-fabric');\n      var status=root.querySelector('.sfy-status');\n      var caption=root.querySelector('.sfy-caption');\n\n      if(!button||!fabric)return;\n\n      button.addEventListener('click',function(){\n        var clean=fabric.getAttribute('data-clean')!=='true';\n        fabric.setAttribute('data-clean',String(clean));\n        status.textContent=clean?'AFTER CLEANING':'BEFORE CLEANING';\n        caption.textContent=clean\n          ? 'A conceptual illustration of refreshed fabric.'\n          : 'Everyday use can leave marks and ingrained dirt on fabric surfaces.';\n        button.textContent=clean\n          ? 'VIEW BEFORE ↗'\n          : 'VIEW REFRESHED FABRIC ↗';\n      });\n    });\n  }\n\n  if(document.readyState==='loading'){\n    document.addEventListener('DOMContentLoaded',initSafy);\n  }else{initSafy()}\n\n  document.addEventListener('shopify:section:load',initSafy);\n})();\n\u003c\/script\u003e\n","brand":"Solveo","offers":[{"title":"Default Title","offer_id":68167697400100,"sku":null,"price":60.0,"currency_code":"ZAR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1028\/5269\/0212\/files\/cp1fnl.png?v=1794415371","url":"https:\/\/solveo.co.za\/products\/upholstery-carpet-cleaner","provider":"Solveo","version":"1.0","type":"link"}